1. 程式人生 > >mybatis中批量操作 foreach

mybatis中批量操作 foreach

問題:

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屬性:

  1. 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list
  2. 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array
  3. 如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可以封裝成map,實際上如果你在傳入引數的時候,在breast裡面也是會把它封裝成一個Map的,map的key就是引數名,所以這個時候collection屬性值就是傳入的List或array物件在自己封裝的map裡面的key

即,collection屬性有三種取值;分別是:list,array,和(當傳入引數是Map時,取值為Map中的key對應的值)。
當引數是Map時,collection屬性取值為Map中key對應的取值;如上文的栗子。

後記:

ps:其實沒那麼想記下來;但是感覺好久沒寫點什麼了=。=