mybatis中批量操作 foreach
阿新 • • 發佈:2018-12-26
問題:
MyBatis中批量操作,如批量更新、批量刪除等
解決:
關鍵:使用foreach,迴圈。
栗子:
批量更新,引數是Map型別
//private List<Map<String,Object>> rowDatas;
//params.put("resultlist", result.getRowDatas());
//我是想說:result.getRowDatas(),返回值是一個List型別資料;放到了型別為Map的params中;
public int update(String insertId, Map<String, Object> params) {
return super.getSqlSession().update("updateByBatch", params);
}
<update id="updateByBatch" parameterType="java.util.HashMap">
<foreach collection="resultlist" item="item" index="index" open="begin" close=";end;" separator=";">
update table t
set
t.aa= #{item.aa, jdbcType=VARCHAR},
t.bb= #{item.bb, jdbcType=VARCHAR}
where t.id= #{item.id, jdbcType=VARCHAR}
</ foreach>
</update>
解釋:
如果引數是Map型別,在foreach中,
- collection:取值為map中的key值;這裡渠道的resultlist,是一個List型別的資料。
- item:迴圈中單個物件的引用;
在foreach中:
item是一個resultlist中的一個元素;
通過 #{item.ljkc, jdbcType=VARCHAR} 方式,獲得取值。(已經暈了)
拓展:
參考:https://blog.csdn.net/hjh908778/article/details/79034395/
關於mybatis中的foreach的使用:
collection屬性:
- 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list
- 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array
- 如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可以封裝成map,實際上如果你在傳入引數的時候,在breast裡面也是會把它封裝成一個Map的,map的key就是引數名,所以這個時候collection屬性值就是傳入的List或array物件在自己封裝的map裡面的key
即,collection屬性有三種取值;分別是:list,array,和(當傳入引數是Map時,取值為Map中的key對應的值)。
當引數是Map時,collection屬性取值為Map中key對應的取值;如上文的栗子。
後記:
ps:其實沒那麼想記下來;但是感覺好久沒寫點什麼了=。=