ibatis中的动态SQL:isNotNull,isPropertyAvailable,isNotEmpty,isGreaterThan等标签用法

时间:2021-08-17 23:21:47

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>

  1. <dynamic prepend="where questionId in">   
  2. <isNotNull property="actionIds">   
  3. <iterate property="actionIds" open="(" close=")" conjunction=",">   
  4. #actionIds[]#   
  5. </iterate>   
  6. </isNotNull>   
  7. </dynamic>   
点击打开链接

 注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。