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。