批量修改在开发中也很常见,之前公司一直用的是自己封装好的方法拿过来直接用就ok了,
最近刚到一个新的项目里,发现没有封装好的方法,项目时间又紧,只能用mybatis自己的批量修改
mybatis 批量修改又两种方式。
第一种:
循环执行sql方法
<update id="batchUpdateMatchById" parameterType="java.util.List">
<if test="constructions!= null and constructions.size() > 0 >
<foreach collection="constructions" item="item" index="index" open="" close="" separator=";">
update standard
<set>
<if test="item.matchMaterialFlag != null and item.matchMaterialFlag != '' ">
match_material_flag = #{item.matchMaterialFlag}
</if>
<if test="item.materialId != null and item.materialId != '' ">
material_id = #{item.materialId}
</if>
</set>
where id = #{item.id}
</foreach>
</if>
</update>
**第二种:使用case when then **
<update id="batchUpdateMatchById" parameterType="java.util.List">
UPDATE
standard_construction
<trim prefix="set" suffixOverrides=",">
<trim prefix="match_material_flag =case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.matchMaterialFlag != null and item.matchMaterialFlag !='' ">
when id=#{item.id} then #{item.matchMaterialFlag}
</if>
</foreach>
</trim>
<trim prefix="upd_time =case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.updTime}
</foreach>
</trim>
<trim prefix="is_match_pre =case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.isMatchPre != null and item.isMatchPre != '' ">
when id=#{item.id} then #{item.isMatchPre}
</if>
</foreach>
</trim>
<trim prefix="material_id =case" suffix="end">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.materialId}
</foreach>
</trim>
</trim>
WHERE
<foreach collection="list" separator="or" item="item" index="index">
id = #{item.id}
</foreach>
</update>
重点说下第二种方法吧:
我就在第二种方法中进坑了,其实也挺简单的一个问题:
就是传入的参数中 is_match_pre 字段可能会为null 或‘’ 当时我没有添加if 判断 ,
还有就是 最有一个要修改的参数 end后面添加了 , 导致sql语句一直报错
如:
<trim prefix="material_id =case" suffix="end,">
<foreach collection="list" item="item" index="index">
when id=#{item.id} then #{item.materialId}
</foreach>
</trim>