- 浏览: 545178 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
wocan23:
镜像是不是就是集群里面的从服务器啊
高并发处理方案 -
chenyi0834:
net.sf.ehcache.Cache ehCache=Ap ...
spring+ehCache简单整合使用示例 -
fsh430623:
是一个获取spring容器bean的工具类
spring+ehCache简单整合使用示例 -
hxc985815621:
ApplicationContextUtils是什么?
spring+ehCache简单整合使用示例 -
peixingchen:
你好,楼主,Action里面的CompanyApplyDTO类 ...
jquery+struts1.3.8的ajax上传文件
接使用JDBC一个非常普遍的问题就是动态SQL。使用参数值、参数本身和数据列都是动态SQL,通常是非常困难的。典型的解决办法就是用上一堆 的IF-ELSE条件语句和一连串的字符串连接。对于这个问题,Ibatis提供了一套标准的相对比较清晰的方法来解决一个问题,这里有个简单的例子:
<select id="getUserList" resultMap="user">
select * from user
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
order by createTime desc
</select>
上面的例子中,根据参数bean“id”属性的不同情况,可创建两个可能的语句。如果参数“id”大于0,将创建下面的语句:
select * from user where user_id = ? order by createTime desc
或者,如果“id”参数小于等于0,将创建下面的语句:
select * from user order by createTime desc
以上的这个例子是否可以看出Ibatis里提供的简单的写法来实现了复杂拖沓的动态SQL呢?我们在做查询的时候,对于同一个表,甚至可以用来定义一个动态SQL,做到重用的地步,还是上面那个例子:
<sql id="queryCondition">
<dynamic prepend="WHERE">
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
</dynamic>
</sql>
<select id="getUserList" resultMap="user">
select * from user
<!-- 引入动态的查询条件 -->
<include refid="queryCondition"/>
order by createTime desc
</select>
这个使用的话是否更加的具有公用性能,这就是Ibatis带来的便利。
在Ibatis中,动态的条件元素包含一下几种:二元条件元素、一元条件元素和其他条件元素:
(1)、二元条件元素:将一个属性值和静态值或另一个属性值比较,如果条件为真,元素将被包容在查询SQL语句中。
二元条件元素的属性:
perpend——可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property——是比较的属性(必选)
compareProperty——另一个用于和前者比较的属性(必选或选择compareValue)
compareValue——用于比较的值(必选或选择compareProperty)
<isEqual> 比较属性值和静态值或另一个属性值是否相等。
<isNotEqual> 比较属性值和静态值或另一个属性值是否不相等。
<isGreaterThan> 比较属性值是否大于静态值或另一个属性值。
<isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值。
<isLessThan> 比较属性值是否小于静态值或另一个属性值。
<isLessEqual>
比较属性值是否小于等于静态值或另一个属性值。
举个小例子:
<isLessEqual prepend=”AND” property=”age” compareValue=”18”>
ADOLESCENT = ‘TRUE’
</isLessEqual>
如果大于等18岁时,则为成年人
(2)、一元条件元素:一元条件元素检查属性的状态是否符合特定的条件。
一元条件元素的属性:
prepend——可被覆盖的SQL语句组成部分,添加在语句前面(可选)
property——被比较的属性(必选)
<isPropertyAvailable> 检查是否存在该属性(存在parameter bean的属性)
<isNotPropertyAvailable> 检查是否不存在该属性(不存在parameter bean的属性)
<isNull> 检查属性是否为null
<isNotNull> 检查属性是否不为null
<isEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(“”或size() < 1)
<isNotEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否不为null或不为空(“”或size() > 0)
小例子:
<isNotEmpty prepend="AND" property="firstName" >
FIRST_NAME=#firstName#
</isNotEmpty>
(3)、其他元素条件
(a).Parameter Present:这些元素检查参数对象是否存在
Parameter Present条件的属性
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
<isParameterPresent> 检查是否存在参数对象(不为null)
<isNotParameterPresent> 例子:
<isNotParameterPresent prepend=”AND”>
EMPLOYEE_TYPE = ‘DEFAULT’
</isNotParameterPresent>
(b)、Iterate:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate> 遍历类型为java.util.List的元素。
例子:
<iterate prepend="AND" property="userNameList"
open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。
<select id="getUserList" resultMap="user">
select * from user
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
order by createTime desc
</select>
上面的例子中,根据参数bean“id”属性的不同情况,可创建两个可能的语句。如果参数“id”大于0,将创建下面的语句:
select * from user where user_id = ? order by createTime desc
或者,如果“id”参数小于等于0,将创建下面的语句:
select * from user order by createTime desc
以上的这个例子是否可以看出Ibatis里提供的简单的写法来实现了复杂拖沓的动态SQL呢?我们在做查询的时候,对于同一个表,甚至可以用来定义一个动态SQL,做到重用的地步,还是上面那个例子:
<sql id="queryCondition">
<dynamic prepend="WHERE">
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
</dynamic>
</sql>
<select id="getUserList" resultMap="user">
select * from user
<!-- 引入动态的查询条件 -->
<include refid="queryCondition"/>
order by createTime desc
</select>
这个使用的话是否更加的具有公用性能,这就是Ibatis带来的便利。
在Ibatis中,动态的条件元素包含一下几种:二元条件元素、一元条件元素和其他条件元素:
(1)、二元条件元素:将一个属性值和静态值或另一个属性值比较,如果条件为真,元素将被包容在查询SQL语句中。
二元条件元素的属性:
perpend——可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property——是比较的属性(必选)
compareProperty——另一个用于和前者比较的属性(必选或选择compareValue)
compareValue——用于比较的值(必选或选择compareProperty)
<isEqual> 比较属性值和静态值或另一个属性值是否相等。
<isNotEqual> 比较属性值和静态值或另一个属性值是否不相等。
<isGreaterThan> 比较属性值是否大于静态值或另一个属性值。
<isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值。
<isLessThan> 比较属性值是否小于静态值或另一个属性值。
<isLessEqual>
比较属性值是否小于等于静态值或另一个属性值。
举个小例子:
<isLessEqual prepend=”AND” property=”age” compareValue=”18”>
ADOLESCENT = ‘TRUE’
</isLessEqual>
如果大于等18岁时,则为成年人
(2)、一元条件元素:一元条件元素检查属性的状态是否符合特定的条件。
一元条件元素的属性:
prepend——可被覆盖的SQL语句组成部分,添加在语句前面(可选)
property——被比较的属性(必选)
<isPropertyAvailable> 检查是否存在该属性(存在parameter bean的属性)
<isNotPropertyAvailable> 检查是否不存在该属性(不存在parameter bean的属性)
<isNull> 检查属性是否为null
<isNotNull> 检查属性是否不为null
<isEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(“”或size() < 1)
<isNotEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否不为null或不为空(“”或size() > 0)
小例子:
<isNotEmpty prepend="AND" property="firstName" >
FIRST_NAME=#firstName#
</isNotEmpty>
(3)、其他元素条件
(a).Parameter Present:这些元素检查参数对象是否存在
Parameter Present条件的属性
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
<isParameterPresent> 检查是否存在参数对象(不为null)
<isNotParameterPresent> 例子:
<isNotParameterPresent prepend=”AND”>
EMPLOYEE_TYPE = ‘DEFAULT’
</isNotParameterPresent>
(b)、Iterate:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate> 遍历类型为java.util.List的元素。
例子:
<iterate prepend="AND" property="userNameList"
open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。
发表评论
-
springjdbc的对象映射与命名参数问题
2016-01-07 09:24 1739springjdbctemplate ... -
mappingDirectoryLocations/mappingJarLocations/mappingResources/mappingLocations的
2015-10-20 17:38 2475于spring对hibernate配置文件hibernate ... -
springmvc服务端数据验证的自定义验证与扩展使用
2014-02-20 11:37 2020... -
springmvc服务端验证
2014-02-20 11:26 4584... -
spring+ehCache简单整合使用示例
2013-11-08 10:31 19695下面介绍一下简单使用的配置过程:ehcache.jar及spr ... -
springmvc拦截器使用小结
2013-09-28 11:59 1628springmvc拦截器使用小结 想做个session拦截验 ... -
mybaits级联查询
2013-09-22 11:03 1038mybaits级联查询 1对1的级联或关联查询如下:用ass ... -
access is denied 可能的原因分析
2013-07-30 09:51 1745access is denied 可能的原因分析 用 ap ... -
spring3配置文件中的context:property-placeholder/元素
2013-07-29 15:42 1266spring3配置文件中的context:property-p ... -
mybatis批量添加数据与主键处理:
2013-07-22 09:38 20098mybatis批量添加数据处理: 主要在于xml文件中 ... -
hibernate如何执行本地sql
2012-02-10 13:30 1642因本人记性不好,所以在此做个记录,以便日后查找。呵呵 执行 ... -
spring quartz 整合示例
2011-11-29 16:33 1468很简单,导入jar包我就不说了,百度一下,多的是。 附件是另 ... -
spring aop简单应用示例
2011-11-01 17:46 1587spring的 aop功能强大,这里是一个简单示例: 监控对特 ... -
There is no ID/IDREF binding for IDREF
2011-07-21 15:10 3035<bean id="mySingProduct ... -
query specified join fetching, but the owner of the fetched association was not
2011-07-20 11:11 3486from TSignpartDTO Z left join f ... -
could not initialize proxy - no Session 问题处理
2011-07-15 18:59 1857在做关联查询后,在页面列表显示出现could not init ... -
hibernate子表数据关联修改
2011-07-13 15:07 1874String hql = "update TProj ... -
spring的JdbcDaoSupport的一些用法示例
2011-03-04 16:20 1472一些API的示例用法,希望有所帮助。看附件吧。大家 -
普通java bean中获取Spring的ApplicationContext
2010-11-06 10:57 5154很多情况下,我们需要在普通javabean中获取spring ... -
Spring2.5的新特性:第一部分
2010-07-19 11:34 963(转载来源:http://www.infoq.com/cn/a ...
相关推荐
mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。 mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。mybatis动态sql,动态sql解析引擎,类似mybatis动态sql的功能。mybatis动态sql,...
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...
if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis
mybatis动态sql批量增删改查,增强了mybatis的认识。
### 什么是MyBatis动态SQL MyBatis作为一种流行的Java持久层框架,为开发者提供了将数据库操作与Java对象之间的映射进行简化的便捷方法。它不仅支持传统的SQL查询方式,还引入了动态SQL这一概念,这使得MyBatis在...
附件是MyBatis 动态 SQL 示例,MyBatis 是一个持久层框架,它允许用户在 XML 文件中编写动态 SQL 语句。MyBatis 的动态 SQL 功能非常强大,它允许开发者根据运行时的条件动态地生成 SQL 语句。这使得 MyBatis 能够...
附件是MyBatis 动态SQL示例,MyBatis 是一个持久层框架,它允许用户在 XML 文件中编写动态 SQL 语句。MyBatis 的动态 SQL 功能非常强大,它允许开发者根据运行时的条件动态地生成 SQL 语句。这使得 MyBatis 能够灵活...
为了解决这些问题,MyBatis框架引入了动态SQL机制,这是一种基于条件的SQL构建方式,它允许开发者在XML映射文件中定义SQL模板,并通过预定义的标签动态地生成SQL语句。这种方式极大地提高了代码的复用性和可维护性,...
动态 SQL 是 MyBatis 的一大特色,它允许我们在运行时根据条件构建 SQL 语句,极大地提高了代码的可维护性和灵活性。 动态 SQL 在 MyBatis 中主要通过 XML 映射文件或者注解来实现。在 XML 映射文件中,我们可以...
内容概要:本文介绍了MyBatis动态SQL的基本概念、常用标签和使用技巧,帮助读者了解如何构建灵活的查询语句。 使用人群:适用于使用MyBatis框架进行数据库操作的开发者,尤其是需要构建复杂查询逻辑的开发者。 ...
MyBatis的核心组件包括配置文件、Mapper接口和Mapper XML文件,它们共同协作实现SQL的动态生成和执行。 2. **SQL方言的必要性** 不同的数据库管理系统(DBMS)有着各自的SQL方言,这些差异可能体现在语法、函数...
这就是MyBatis动态SQL的功能所在。 动态SQL是MyBatis的一大特色,它使得我们能够在运行时根据条件构建SQL语句。MyBatis通过`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`, `<foreach>`等标签来...
MyBatis动态SQL和批量插入的应用 MyBatis是一款功能强大且灵活的持久层框架,提供了多种方式来对数据库进行交互。其中,动态SQL是一种非常强大的特性,能够根据不同的条件生成不同的SQL语句。下面将详细介绍MyBatis...
基于mybatis的慢SQL小插件,原理是mybatis拦截器。只需要在springboot的配置文件做简单的配置,mybatis拦截器将SQL中所有参数自动做了填充。拦截器监控慢SQL并将完整的可执行的SQL语句打印在日志文件中,复制该SQL...
标题 "mybatissql_mybatis解决sql注入" 暗示了我们正在讨论MyBatis框架如何处理SQL注入问题。SQL注入是一种常见的安全漏洞,攻击者可以通过恶意输入篡改SQL查询,获取、修改或删除数据库中的敏感数据。MyBatis,作为...
10. **最佳实践**: 应该尽量保持 SQL 语句简洁,避免过于复杂的动态 SQL,同时注意 SQL 注入的安全问题,使用预编译的 PreparedStatement 以提高效率。 通过这个测试项目,你可以深入了解 Mybatis 动态 SQL 的各个...
【标题】"springboot+mybatis+sqlserver"是一个基于Spring Boot、MyBatis和Microsoft SQL Server构建的基础开发框架,适用于快速开发企业级应用。这个框架整合了三个关键组件,旨在简化开发流程,提高开发效率。 ...
把 mybatis 输出的sql日志还原成完整的sql语句。 将日志输出的sql语句中的问号 ? 替换成真正的参数值。 通过 "Tools -> MyBatis Log Plugin" 菜单或快捷键 "Ctrl+Shift+Alt+O" 启用。 点击窗口左边的 "Filter" ...
在使用MyBatis-SQL生成器时,需要注意文件编码格式的问题。文件编码格式必须与系统和编辑器保持一致,通常推荐使用UTF-8,因为这是大部分现代软件默认的编码格式,如果更改了编码,可能导致乱码或者程序无法正常运行...