记录一个批量更新list数据的bug
mapper.java
mapper.java
void updateOrder(@Param(value = "list") List<OrderGoods> list);
mapper.xml
<update id="updateOrder">
update shop_order
<trim prefix="set" suffixOverrides=",">
<trim prefix="invoice_num =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.invoiceNum!=null">
when rec_id=#{i.recId} then #{i.invoiceNum}
</if>
</foreach>
</trim>
<trim prefix="service_num =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.serviceNum!=null">
when rec_id=#{i.recId} then #{i.serviceNum}
</if>
</foreach>
</trim>
<trim prefix="service_amount_invoice =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.serviceAmountInvoice!=null">
when rec_id=#{i.recId} then #{i.serviceAmountInvoice}
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" separator="or" item="i" index="index" >
rec_id=#{i.recId}
</foreach>
</update>
问题:
本来是想着把两条同一个recId的数据分别保存服务费数量和开票数量,我感觉应该是相当于一条一条的执行sql,事实是直接将所有数据拼接成一条大的sql,然后执行。所以同一个recId分别保存用这个是不太现实的。
解决方案:
- 将整个list进行for循环保存。数据量大不太可行。
- 将同一个recId的实体进行合并,合并成有且只有一个recId,然后用上面那个sql执行。
- 其他的暂时还没想到 🤣