程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> IBatis學習總結之動態拼sql

IBatis學習總結之動態拼sql

編輯:C#入門知識

     在編寫SqlMaps的時候,經常需要把一個sql拆分成多個片段。IBatis提供了一個簡單有很實用的分割節點來進行SQL的分割。舉個簡單的例子,假設需要查詢一些學生的信息。

    原來的寫法是:




現在用sql標簽可以這樣寫:



    



    

<include refid ="SelectALL"/> refid:就是指要調用sql標簽的id。

sql標簽就相當於C#裡的定義一個字符串,裡面存著一些值,可以被其他標簽調用。這樣一來就可以減少重復代碼的書寫。

IBatis動態拼接sql

實例:

View Code

動態標簽分類:1<dynamic>,2 二元標簽,3 一元標簽,4 <iterate> 
這四種標簽以及他們的子標簽具有共同的屬性prepend,open,close。

去除第一個prepend="and"

一元條件元素的屬性: 
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>

isPropertyAvailable的區別
這個兩個屬性非常有用 
isPropertyAvailable
isNotEmpty
入參一般是一個封裝了數據的
如果希望一個屬性無論為何值都符合條件則使用
如果希望一個屬性只是不為空的時候才符合條件就用

<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。 
[color=darkred][/color] 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved