prepend <isNotNull prepend="and" property="firstName" >
生成的语句不会有多余的and,因为dynamic有一个隐藏的属性:removeFirstPrepend="true", 所以一般要写上prepend="and",需要的时候它会自动去掉。
Ibatis中的动态SQL,主要分为一元条件和二元条件查询:
一元条件查询关键字:
<isPropertyAvailable> 如果参数有这个属性查询条件有效(一般希望一个属性无论何值时都符合条件时使用)。
<isNotPropertyAvailable> 如果参数没有有这个属性查询条件有效。<isNull> 如果参数为NULL则查询条件有效。
<isNotNull> 如果参数不为NULL则查询条件有效。
<isEmpty> 如果参数为空则查询条件有效。
<isNotEmpty> 如果参数不为空则查询条件有效。
一元元素的属性:
prepend:可被覆盖的SQL语句组成部分,添加在语句的前面。
property:被比较的属性
二元条件查询关键字:
<isEqual> 如果参数相等于值则查询条件有效。
<isNotEqual> 如果参数不等于值则查询条件有效。
<isGreaterThan> 如果参数大于值则查询条件有效。
<isGreaterEqual> 如果参数大于等于值则查询条件有效。
<isLessEqual> 如果参数小于等于值则查询条件有效。
<isLessThan> 如果参数小于值则查询条件有效。
如下所示:
<isLessEqual prepend = ”AND” property = ”age” compareValue = ”18” >ADOLESCENT = ‘TRUE’
</isLessEqual>
二元元素的属性:
prepend: 可被覆盖的SQL语句组成部分,添加在语句的前面。
property: 被比较的属性
compareProperty: 另一个被比较的属性
compareValue: 被比较的值
此外,还有其它的元素:
1.<isParameterPresent>
如果参数类不为NULL则查询条件有效。
<isNotParameterPresent>
Checks to see if the parameter object is not present (null).
实例:
<isNotParameterPresent prepend=”AND”>
EMPLOYEE_TYPE = ‘DEFAULT’
</isNotParameterPresent>
2.Iterate:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
遍历类型为java.util.List的元素。
例子:
<iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
- <dynamic prepend="where questionId in">
- <isNotNull property="actionIds">
- <iterate property="actionIds" open="(" close=")" conjunction=",">
- #actionIds[]#
- </iterate>
- </isNotNull>
- </dynamic>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。