更新一批数据,根据不同code 更新不同的时间。
code 不是主键 。但是也是唯一的。
mybatis-plus 有批量更新的方法
都是根据ID 更新。
没法解决问题。
@Data public class UpdateOrderDto { /** * 订单号 */ private String orderCode; /** * 买家支付时间 */ private String paymentTime; }
boolean updateOrderPaymentTime(List<UpdateOrderDto> updateOrderDto);
@Override public boolean updateOrderPaymentTime(List<UpdateOrderDto> updateOrderDto) { orderMapper.updateOrderPaymentTime(updateOrderDto); return true; }
int updateOrderPaymentTime(@Param("updateOrderDto") List<UpdateOrderDto> updateOrderDto);
<update id="updateOrderPaymentTime"> UPDATE htc.htc_order a JOIN ( <foreach collection="updateOrderDto" item="item" separator="UNION"> SELECT <!--使用 ${} shardingsphere官方问题 详细参考 github issues:https://github.com/apache/shardingsphere/issues/8108--> "${item.paymentTime}" AS payment_time, "${item.orderCode}" AS order_code </foreach> ) b USING (order_code) SET a.payment_time = b.payment_time </update>
将 传进来的list集合 ,循环查询集合属性取别名,与数据库字段相对应,最后取并集。
通过 USing 的 用法,进行更新操作。妙哉!
说的不是很清楚,理解尚浅,以后深度理解,在做分析。
明亮教的方法,仅此做记录。