ibatis 动态sql
动态标签分类:1<dynamic>,2 二元标签,3 一元标签,4 <iterate>
这四种标签以及他们的子标签具有共同的属性prepend,open,close
1 <dynamic>
- <statement id="dynamicGetAccountList" resultMap="account-result">
- select * from ACCOUNT
- <dynamic prepend="WHERE">
- <isNotNull prepend="AND" property="firstName">
- <!-- 生成的语句不会有多余and,因为dynamic有一个隐含的属性,
- removeFirstPrepend="true",所有一般都要写上perpend="and",需要的时候他会自动去掉-->
- (ACC_FIRST_NAME = #firstName#
- <isNotNull prepend="OR" property="lastName">
- ACC_LAST_NAME = #lastName#
- </isNotNull>
- )
- </isNotNull>
- <isNotNull prepend="AND" property="emailAddress">
- ACC_EMAIL like #emailAddress#
- </isNotNull>
- <!-- <isNotEmpty property="firstName" prepend="and" open="(" close=")" > firstName=#firstName# </isNotEmpty> -->
- <isGreaterThan prepend="AND" property="id"
- compareValue="0">
- <!-- //如果参数id的值大于给定的比较值(0),那么加上下面的语句(and acc_id=#id#) ACC_ID-->
- = #id#
- </isGreaterThan>
- </dynamic>
- order by ACC_LAST_NAME
- </statement>
<statement id="dynamicGetAccountList" resultMap="account-result">
		select * from ACCOUNT
		<dynamic prepend="WHERE">
			<isNotNull prepend="AND" property="firstName">
			
<!--				生成的语句不会有多余and,因为dynamic有一个隐含的属性,
removeFirstPrepend="true",所有一般都要写上perpend="and",需要的时候他会自动去掉-->
				(ACC_FIRST_NAME = #firstName#
				<isNotNull prepend="OR" property="lastName">
					ACC_LAST_NAME = #lastName#
				</isNotNull>
				)
			</isNotNull>
			<isNotNull prepend="AND" property="emailAddress">
				ACC_EMAIL like #emailAddress#
			</isNotNull>
			<!-- <isNotEmpty property="firstName" prepend="and" open="(" close=")" > firstName=#firstName# </isNotEmpty> -->
			<isGreaterThan prepend="AND" property="id"
				compareValue="0">
<!--				//如果参数id的值大于给定的比较值(0),那么加上下面的语句(and acc_id=#id#) ACC_ID-->
				= #id#
			</isGreaterThan>
		</dynamic>
		order by ACC_LAST_NAME
	</statement>
一元条件元素的属性: 
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>   
二元条件元素的属性: 二元是两个对象进行比较
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选) 
property - 被比较的属性(必选) 
compareProperty - 另一个用于和前者比较的属性(必选或选择compareValue) 
    compareValue - 用于比较的值(必选或选择compareProperty) 
 
<isEqual>  比较属性值和静态值或另一个属性值是否相等。    
<isNotEqual>  比较属性值和静态值或另一个属性值是否不相等。     
<isGreaterThan>  比较属性值是否大于静态值或另一个属性值。    
<isGreaterEqual>  比较属性值是否大于等于静态值或另一个属性值。    
<isLessThan>  比较属性值是否小于静态值或另一个属性值。     
<isLessEqual>  比较属性值是否小于等于静态值或另一个属性值。
例子: 
<isLessEqual prepend=”AND” property=”age” compareValue=”18”> 
ADOLESCENT = ‘TRUE’ 
</isLessEqual>   
<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> = 
and(username=name1 or username=name2...)
 
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。  
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号