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

embedded/2024/10/18 0:24:46/

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

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

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

java">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` 属性的值进行累加,而不需要先读取其当前值。这种操作效率较高,因为减少了对数据库的读取操作,并且直接在数据库中完成了值的更新。


http://www.ppmy.cn/embedded/103124.html

相关文章

从零开始掌握Vue实例

从零开始掌握Vue实例&#xff1a;深入理解数据绑定与生命周期的核心秘诀 引言 简要介绍主题&#xff1a; 在学习Vue.js的过程中&#xff0c;Vue实例是最基础也是最关键的部分。Vue实例是Vue应用的核心&#xff0c;它是数据、DOM元素和Vue组件之间的桥梁。掌握Vue实例的使用对于…

MySQL集群 主从复制 和 高可用 配置详解

安装数据库 1、环境依赖 [rootmysql-node10 ~]# yum install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y2、下载软件包 3、进行解压 [rootmysql ~]# tar zxf mysql-boost-5.7.44.tar.gz4、生成源码 #进入…

nuxt3连接mongodb操作

在Nuxt 3中连接MongoDB并进行操作&#xff0c;你可以使用nuxtServerInit生命周期钩子来初始化数据库连接&#xff0c;并在组件中使用Vue的setup函数来执行数据库操作。以下是一个简单的例子&#xff1a; 安装nuxt和mongodb的Node.js驱动&#xff1a;npm install mongodb nuxt/k…

【Vue】Echart图表中的属性

目录 背景属性介绍1. title2. tooltip3. legend4. toolbox5. color6. grid7. xAxis / yAxis8. series9. visualMap10. dataZoom 示例 背景 最近Echart用的比较多&#xff0c;改动的展示效果其实也就那么些&#xff0c;而且很多案例、展示效果在Echart官网写的都很丰富&#xf…

【Docker】容器挂载文件修改后 Commit 新镜像,挂载文件不会更新

【Docker】容器挂载文件修改后 Commit 新镜像&#xff0c;挂载文件不会更新 问题描述&#xff1a;场景验证1. 自定义镜像 Dockerfile2. 创建 hello.txt 文件&#xff1a;3. 构建自定义镜像4. 运行镜像&#xff0c;并检查容器内部文件内容5. 新增挂载目录&#xff0c;并修改&…

linux之网络子系统-MAC帧、数据报、段 的头部信息

一、MAC帧 格式 MAC帧是属于链路层&#xff0c;网卡发送数据的格式。 MAC帧主要有两种格式&#xff0c;一种是以太网V2标准&#xff0c;一种是IEEE 802.3&#xff0c;常用的是前者。 DMAC&#xff08;Destination MAC&#xff09;是目的MAC地址。DMAC字段长度为6个字节&#…

100101-批量将指定文件夹下视频时长快进或慢放到指定时长,指定比例尺寸,例如将50S视频转为1:1尺寸的30S-UI

程序功使用环境▶适用的系统环境说明&#xff1a;win7以上64位win系统注意&#xff1a;win32位系统/mac系统需要额外定制▶使用期限&#xff1a;无需注册、不绑电脑、无时间限制▶如何安装&#xff1a;不需要安装程序功能说明▶子文件夹穿透&#xff1a;支持▶支持的文件格式&a…

【RabbitMQ高级特性】消息可靠性原理

1. 消息确认机制 1.1 介绍 我们可以看到RabbitMQ的消息流转图&#xff1a; 当消息从Broker投递给消费者的时候会存在以下两种情况&#xff1a; consumer消费消息成功consumer消费消息异常 如果说RabbitMQ在每次将消息投递给消费者的时候就将消息从Broker中删除&#xff0c…