sql 批量跟新sql 语句

 

问题:

更新一批数据,根据不同code 更新不同的时间。

code 不是主键 。但是也是唯一的。

 

解决:

mybatis-plus  有批量更新的方法

 

 

 

都是根据ID 更新。

没法解决问题。

 

写 sql 语句。

 

 entity层

@Data
public class UpdateOrderDto {
    /**
     * 订单号
     */
    private String orderCode;
    /**
     * 买家支付时间
     */
    private String paymentTime;
}

 

 

service层

 

 

 

  boolean updateOrderPaymentTime(List<UpdateOrderDto> updateOrderDto);

 

 

impl层

 

 

 

 @Override
    public boolean updateOrderPaymentTime(List<UpdateOrderDto> updateOrderDto) {
        orderMapper.updateOrderPaymentTime(updateOrderDto);
        return true;
    }

 

mapper层

int updateOrderPaymentTime(@Param("updateOrderDto")  List<UpdateOrderDto> updateOrderDto);

 

 

xml层  重点

 

 

 <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 的 用法,进行更新操作。妙哉!

 

test用例

 

 

说的不是很清楚,理解尚浅,以后深度理解,在做分析。

 

明亮教的方法,仅此做记录。

 

posted @ 2022-01-07 18:36  未确定  阅读(1002)  评论(0编辑  收藏  举报