ibatis之iterator研究

iBtatis的動態特性在很多時候能幫助大家做很多事情.Iterator就是用一個列表動態的生成sql的一部分的動態特性.網上這方資料有很多,個人覺得不是很全.在這裏拋磚引玉,望高手多多指教.

    iterator的語法相對比較簡單.下面摘抄語法於下.(引用於http://blog.csdn.net/dinglinhu/archive/2008/05/27/2487647.aspx )

 

Iterate:這屬性遍歷整個集合,併爲List集合中的元素重

復元素體的內容。
Iterate的屬性:
prepend - 可被覆蓋的SQL語句組成部分,添加在語句的前面(可選)
property - 類型爲java.util.List的用於遍歷的元素(必選)
open - 整個遍歷內容體開始的字符串,用於定義括號(可選)
close -整個遍歷內容體結束的字

符串,用於定義括號(可選)
conjunction - 每次遍歷內容之間的字符串,用於定義AND或OR(可選)

在比較多的網站上就property 很多不同的說法.下面我們通過實例覺得我們的結論:

eg1.傳入的參數是一個list類型.此時property不需要.

Sql代碼
  1. 1.<delete id="Employee.delete" parameterClass="list">     
  2. 2.        DELETE FROM Employee      WHERE 1=1     
  3. 3.            <iterate prepend=" AND id in " open="(" close=")" conjunction=",">     
  4. 4.                #[]#     
  5. 5.            </iterate>        
  6. 6.    </delete>   

 

調用形式:

Java代碼
 
  1.  <SPAN style="COLOR: #ff0000">List<Integer> ids=new ArrayList<Integer>();</SPAN>     
  2. 2.    
  3. 3.    
  4. 4.for (int i = 1; i < 10; i++) {     
  5. 5.    ids.add(i);     
  6. 6.}     
  7. 7.sqlMapClient.delete("Employee.delete",ids); 

eg2.傳入的參數不是list類型,是一個簡單的Pojo,但是該pojo有個list類型的屬性

Java代碼
  1. 1.<delete id="Employee.delete2"  parameterClass="org.jenfer.entity.Dept">     
  2. 2.        DELETE FROM employee    WHERE 1=1    
  3. 3.            <iterate property="empIds" prepend=" AND id in " open="(" close=")" conjunction=",">     
  4. 4.                #empIds[]#     
  5. 5.            </iterate>         
  6. 6.    </delete> 

調用形式:

Java代碼
  1. Dept dept=new Dept();     
  2. 2.<SPAN style="COLOR: #ff0000">List<Integer> empIds=new ArrayList<Integer>();     
  3. 3.dept.setEmpIds(empIds);</SPAN>     
  4. 4.    
  5. 5.    
  6. 6.    
  7. 7.for (int i = 1; i < 10; i++) {     
  8. 8.    empIds.add(i);     
  9. 9.}     
  10. 10.    
  11. 11.sqlMapClient.delete("Employee.delete2",dept);   

eg3:傳入的參數不是list類型,是一個簡單的Pojo,但是該pojo有個list類型的屬性,而且list的元素類型是一個Pojo,不是一個基本類型或者包裝類.

Sql代碼
  1. 1.<delete id="Employee.delete1" parameterClass="org.jenfer.entity.Dept">     
  2. 2.        DELETE FROM employee    WHERE 1=1     
  3. 3.            <iterate property="employees"      
  4. 4.prepend=" AND username in " open="(" close=")" conjunction=",">     
  5. 5.                #employees[].username#     
  6. 6.            </iterate>         
  7. 7.    </delete>   

 調用形式:

Java代碼
  1. 1.List<Employee> employees=new ArrayList<Employee>();     
  2. 2.<SPAN style="COLOR: #ff0000">Dept dept=new Dept();     
  3. 3.dept.setEmployees(employees);</SPAN>     
  4. 4.    
  5. 5.    
  6. 6.Employee employee=null;     
  7. 7.for (int i = 1; i < 10; i++) {     
  8. 8.    employee=new Employee();     
  9. 9.    employee.setUsername("zhangsan"+i);     
  10. 10.    employees.add(employee);     
  11. 11.}     
  12. 12.    
  13. 13.sqlMapClient.delete("Employee.delete1",dept);   

綜上所述:在eg1在的情況下property屬性不需要.在eg2,3情況下property是需要的.另外注意eg2,eg3的的語法稍有不同.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章