MyBatis根据条件批量修改字段的方式
作者:猿陆柒 发布时间:2023-12-16 03:24:01
MyBatis根据条件批量修改字段
背景:
给学生改作业,只要是对的都批量进行数据库的修改
代码以及注释
conttoller
@RestController
@RequestMapping("/work")
public class WorkController {
@Autowired
private WorkService workService;
@PutMapping("/examine")
public HttpResponse examine(Integer[] id) {
Integer total = workService.examine(id);
return HttpResponse.ok("共批改[ "+total+" ]条道题","");
}
}
service
@Service
public class WorkService {
@Autowired
private WorkMapper workMapper;
public Integer examine(Integer[] id) {
return workMapper.examine(id);
}
}
mapper
@Mapper
public interface WorkMapper {
Integer examine(@Param("id")Integer[] id);
}
xml
<!--根据id来批量修改WORK表里面的isEnable字段-->
<update id="examine">
UPDATE WORK SET isEnable=TRUE WHERE id IN
<foreach collection="id" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</update>
工具类HttpResponse(此需求中无关紧要的类)
public class HttpResponse {
private Integer status;
private String message;
private Object object;
public static HttpResponse ok(String message) {
return new HttpResponse(200, message, null);
}
public static HttpResponse ok(Object object) {
return new HttpResponse(200, null, object);
}
public static HttpResponse ok(String message,Object object) {
return new HttpResponse(200, message, object);
}
public static HttpResponse error(Integer status, String message) {
return new HttpResponse(500, message, null);
}
public static HttpResponse error(String message) {
return new HttpResponse(500, message, null);
}
public static HttpResponse error(String message,Object object) {
return new HttpResponse(500, message, object);
}
protected HttpResponse() {
super();
}
private HttpResponse(Integer status, String message, Object object) {
super();
this.status = status;
this.message = message;
this.object = object;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
重点:
如果mapper没加@Param("id")注解会报错找不到参数"id"
至此MyBatis根据id批量修改数据库的某字段需求完成!
MyBatis多条件批量修改
简单记录下
想要修改一张表,是联合主键,也就是where后两个以上条件才能唯一确定一条数据。
如果有唯一键,那么foreach中 用in就可以解决。
现在没办法用in,不然 A in (#{})and B in (#{})感觉成笛卡尔了。
简单点就是要实现执行多条语句。对update做循环。传入参数为 List,ATest类中字段A,B为联合主键,修改C的值
<update id="update" parameterType="java.util.List">
<foreach collection="list" item="val" separator=";" open="begin" close=";end;">
update table_ABC
<set>
<if test="val.C!= null">C = #{val.C},</if>
</set>
where A=#{val.A} and B= #{val.B}
</foreach>
</update>
执行出来效果为:
begin
update table_ABC set C = '2' where A = '1' and B= '1';
update table_ABC set C = '2' where A = '1' and B= '2';
update table_ABC set C = '4' where A = '3' and B= '2';
end;
这里使用的数据库为oracle,oracle执行认为begin和end之前为一条语句
当然,也可以用or 的形式拼接,不过还没测试。
网上查有的说是mysql数据库 mybatis一次执行一条语句。支持多条,可以MySQL连接数据库时,添加语句:“allowMultiQueries=true”
作用:
1.可以在sql语句后携带分号,实现多语句执行。
2.可以执行批处理,同时发出多个SQL语句。
来源:https://blog.csdn.net/qq_42426937/article/details/105018123


猜你喜欢
- 前言Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观
- 1.背景在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final s
- android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触
- 本篇文章,我们来讲解springcloud的服务注册和发现组件,上一章节我们讲解了如何搭建springcloud的多模块项目,已经新建了sp
- 脚本之家在以前介绍过关于C#创建、部署、调用WebService的教程,有兴趣的可以参阅:.NET C#创建WebService服务简单实例
- spring-mybatis获取mapper方式汇总项目背景:pojo下面有一个user实体类Dao包下面写了usermapper.xml
- jcasbin简介:jcasbin 是一个用 Java 语言打造的轻量级开源访问控制框架https://github.com/casbin/
- Maven工程分模块开发完成 父工程配置了 tomcat7插件,运行 run命令执行run指令时失败,报错信息如下:D:\java\JDK8
- 背景近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并发交换指令)代替锁来确保数据在并发访问中的
- 一.使用场景一次请求需要往数据库插入多条数据时,可以节省大量时间,mysql操作在连接和断开时的开销超过本次操作总开销的40%。二.实现方法
- 目录1 起因2 解决方案2.1 在pom中引入2.2 Spring Boot 打包处理2.3 拓展: Spring Boot 打包加入其它资
- 延迟队列延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者
- 一.链表概念链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。逻辑结构:注:1、如上图,相当于火
- 简单介绍一下Java中的Excel文件导出功能(基于HttpServletResponse实现下载)首先,引入需要依赖的jar包:<d
- 众所周知,在墙内开发很头疼的一件事就是Maven仓库的连接速度太慢。虽然对于很多互联网企业和大中型软件公司,建个镜像是分分钟的事。但对于个人
- 前言Emmmm…最近在做项目的途中,有遇到一个方法需要接收的参数只有一个或者较少的时候就懒得写实体类去接收,使用spr
- Spring Boot FeignClient 捕获业务异常信息因项目重构采用spring cloud,feign不可避免。目前spring
- 第一个SpringMvc HelloWorld无启动类springboot才有启动类前端操作访问项目名进入默认主页,显示一个链接点击链接后请
- java 读取网页内容的实例详解import java.io.BufferedReader; import java.io.IOExcept
- 本文实例为大家分享了C#实现chart控件动态曲线绘制的具体代码,供大家参考,具体内容如下思想实验室要做一个动态曲线绘制,网上方法很多,但是