ibatis--条件元素:
下面要讲的内容在日常工作中经常用到,而少有人真正明白为什么这么用,希望大家仔细学习,能够做到知其然知其所以然。
动态标签的作用是动态构建SQL语句,根据不同的一元或二元运算条件构建复杂的SQL语句,
省去了IF-ELSE条件语句和一连串的字符串连接。
先看一个动态SQL的例子:
上面的例子中,<dynamic>元素划分出SQL语句的动态部分。动态部分可以包含任意多的条件元素,条件元素决定是否在语句中包含其中的SQL代码。
Ibatis中,条件元素包含以下几种:二元条件、一元条件和其他条件元素:
1) 二元条件元素:将一个属性值和静态值或另一个属性值比较,如果条件为真,元素将被包容在查询SQL语句中。
二元条件元素的属性:
perpend——可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property——是比较的属性(必选)
compareProperty——另一个用于和前者比较的属性(必选或选择compareValue)
compareValue——用于比较的值(必选或选择compareProperty)
<isEqual> | 比较属性值和静态值或另一个属性值是否相等。 |
<isNotEqual> | 比较属性值和静态值或另一个属性值是否不相等。 |
<isGreaterThan> | 比较属性值是否大于静态值或另一个属性值。 |
<isGreaterEqual> | 比较属性值是否大于等于静态值或另一个属性值。 |
<isLessThan> | 比较属性值是否小于静态值或另一个属性值。 |
<isLessEqual> | 比较属性值是否小于等于静态值或另一个属性值。 |
举个小例子:如果小于等18岁时,则为成年人
<isLessEqual prepend=”AND” property=”age” compareValue=”18”>
ADOLESCENT = ‘TRUE’
</isLessEqual>
2) 一元条件元素:一元条件元素检查属性的状态是否符合特定的条件。
一元条件元素的属性:
prepend——可被覆盖的SQL语句组成部分,添加在语句前面(可选)
property——被比较的属性(必选)
<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:这些元素检查参数对象是否存在
prepend -可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
<isParameterPresent> | 检查是否存在参数对象(不为null) |
<isNotParameterPresent> | 例子: |
b) Iterate:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend -可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property -类型为java.util.List的用于遍历的元素(必选)
open -整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction -每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate> | 遍历类型为java.util.List的元素。
|
上面介绍了ibatis动态SQL的标签,不能一一对上面的标签进行举例,在日常工作中能够熟练掌握。
以上,仅供参考!!