iBATIS动态SQL
来源:互联网 发布:轩辕剑之天之痕mac 编辑:程序博客网 时间:2024/03/29 23:39
直接使用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)
举个小例子:
<isLessEqual prepend=”AND” property=”age” compareValue=”18”>ADOLESCENT = ‘TRUE’</isLessEqual>
如果大于等18岁时,则为成年人
(2)、一元条件元素:一元条件元素检查属性的状态是否符合特定的条件。
一元条件元素的属性:
prepend——可被覆盖的SQL语句组成部分,添加在语句前面(可选)
property——被比较的属性(必选)
小例子:
<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 prepend="AND" property="userNameList" open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。
- ibatis动态sql入门
- ibatis动态SQL语句
- Ibatis动态SQL语句
- ibatis动态sql
- Ibatis动态SQL语句
- ibatis动态sql
- ibatis动态SQL语句
- ibatis 的动态SQL
- ibatis动态sql
- iBATIS动态SQL
- ibatis 动态sql用法
- ibatis动态sql
- ibatis的动态sql
- ibatis 动态sql总结
- IBATIS动态SQL
- ibatis的动态sql
- 【转】ibatis动态sql
- ibatis动态sql
- JSP内置对象之四个作用域
- linux-3.9.7 sdhci 驱动移植 基于QT210
- 明天上班了
- 最长有效括号的长度
- C++ - 容器
- iBATIS动态SQL
- J2EE学习笔记——Spring基础
- log4j入门
- N个数中第k大的元素
- linux awk命令详解
- ubuntu 12.0 下nginx+mysql+php 的安装
- oracle 创建 用户
- timus 1711.Code Names
- Ural-1044. Lucky Tickets. Easy!(简单题)