mybatis批量修改踩过的坑

批量修改在开发中也很常见,之前公司一直用的是自己封装好的方法拿过来直接用就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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值