1.第一种情况,使用for循环进行更新。
这种方式只能将指定Id的某一列的值设置为一样的。存在缺陷。
List<Person> persons = ....;
for(Person person : persons){
update(person);
}
这种方式更新,存在效率慢,没执行一次都需要获取一次数据库的连接,结束之后关闭,比较浪费资源。
2.第二种情况,更新某一列的值。
update table set column = #{value} where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id}
</foreach>
这种方式只能将指定Id的某一列的值设置为一样的。存在缺陷。
3.第三种情况,也是推荐使用的。
为不同的列设置不同的数据,数据量大时候批量更新使用。
<update id="batchUpdateMaterialPurchaseOrder" parameterType="java.util.List">
update tpmc_material_purchase_order t
<trim prefix="set" suffixOverrides=",">//update的set关键字
<trim prefix="sys_remark =case" suffix="end,">//指定需要更新的列名,以","作为后缀
<foreach collection="list" item="item" index="index">
<if test="item.sysRemark !=null and item.sysRemark != ''">//判断参数是否为空
when t.id=#{item.id} then #{item.sysRemark}
</if>
</foreach>
</trim>
<trim prefix="review_status =case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.reviewStatus !=null and item.reviewStatus != ''">
when t.id=#{item.id} then #{item.reviewStatus}
</if>
</foreach>
</trim>
<trim prefix="purchase_id =case" suffix="end,">
<foreach collection="list" item="item" index="index">
<if test="item.purchaseId !=null and item.purchaseId != ''">
when t.id=#{item.id} then #{item.purchaseId}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item.id}
</foreach>
</update>