mybatis關於list的foreach的使用

withawind發表於2019-02-14

當傳入引數為list的時候foreach的使用

當引數為一個list的時候

方法層:

     int deleteAll(List<String> list);

xml檔案中的sql語句

<delete id="deleteAll" parameterType="list">
        delete from classify
        where id in
         <foreach collection="list" index="index" item="item" 
              open="("  separator="," close=")">
               #{item}  
          </foreach>
    </delete>

 

當引數為多個list方法層

控制層:

 

執行層

xml檔案:

 

基本完成

下面是一些常識:

 

foreach元素的屬性主要有 item,index,collection,open,separator,close。

    item表示集合中每一個元素進行迭代時的別名,
    index指 定一個名字,用於表示在迭代過程中,每次迭代到的位置,
    open表示該語句以什麼開始,
    separator表示在每次進行迭代之間以什麼符號作為分隔 符,
    close表示以什麼結束

collection主要有一下3種情況:

    1. 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list
    2. 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array
    3. 如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可

1.單引數List的型別:


 <select id="dynamicForeachTest" parameterType="java.util.List" resultType="Blog">
2           select * from t_blog where id in
3        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
4                #{item}       
5        </foreach>    
6    </select>
上述collection的值為list,對應的Mapper是這樣的
public List dynamicForeachTest(List ids);
測試程式碼:

 

 


2.單引數array陣列的型別


1 <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog">
2     select * from t_blog where id in
3     <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
4          #{item}
5     </foreach>
6 </select> 
上述collection為array,對應的Mapper程式碼:
public List dynamicForeach2Test(int[] ids);
對應的測試程式碼

 


3.自己把引數封裝成Map的型別

1 <select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog">
2         select * from t_blog where title like "%"#{title}"%" and id in
3          <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
4               #{item}
5          </foreach>
6 </select>
上述collection的值為ids,是傳入的引數Map的key,對應的Mapper程式碼:
public List dynamicForeach3Test(Map params);
對應測試程式碼

 

相關文章