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:其实没那么想记下来;但是感觉好久没写点什么了=。=

猜你喜欢

转载自blog.csdn.net/shelly_Chestnut/article/details/84319943