MyBatis Plus中更新方法setSql()的使用

          在 Java 中,若使用 MyBatis-Plus 作为 ORM 框架,可以采取一些策略去编写sql语句。 `LambdaUpdateWrapper` 本身并不支持直接对数据库中的字段进行复杂操作,因为它的主要功能是生成 SQL 更新语句。如果是简单的赋值可以直接set(Object::getAttribute,传参)完成。

       如果想要在原来的属性上进行累加,需要使用 SQL 的 `UPDATE` 语句中的加法操作。这可以通过使用 `setSql()` 方法重新构建 SQL 更新语句来实现。

       下面做简单代码示例,它利用 `setSql` 方法对 `getActualNumber` 进行累加:

private void toCompleteOrder(Long orderId, Integer actualNumber) {
    // 创建 LambdaUpdateWrapper 对象
    LambdaUpdateWrapper<WorkOrder> updateWrapper = new LambdaUpdateWrapper<>();
    
    // 进行条件设定和 SQL 语句累加
    updateWrapper.eq(WorkOrder::getId, orderId)
                 .setSql("actual_number = actual_number + " + actualNumber);

    // 执行更新操作
    workOrderService.update(updateWrapper);
}

解释

1. 条件设置:
   - 使用 `eq(WorkOrder::getId, orderId)` 指定更新条件,这里不会改动。

2. 累加操作:
   - 使用 `setSql()` 方法构建原始 SQL 语句。`actual_number = actual_number + " + actualNumber` 表示将 `actual_number` 的当前值和传入的 `actualNumber` 累加。

3. 执行更新:
   - 通过调用 `workOrderService.update(updateWrapper)` 执行更新操作,这个 `workOrderService` 是 MyBatis-Plus 提供的 Service 层接口。

注意事项

- SQL 注入风险: 在 SQL 语句构建中,避免直接将用户输入的值拼接到 SQL 中,这可能导致 SQL 注入风险。在这个情况下,由于 `actualNumber` 是整型,且假设是程序内部生成的值,风险较小,但最好还是做好相关的输入校验和安全措施。
  
- 数据一致性: 确保在进行累加操作的过程中,`actualNumber` 不会导致数据异常,例如超出的业务规则等。

       通过这样的方式,可以实现对 `actualNumber` 属性的值进行累加,而不需要先读取其当前值。这种操作效率较高,因为减少了对数据库的读取操作,并且直接在数据库中完成了值的更新。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值