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
猜你喜欢
- Java Benchmark 基准测试的实例详解import java.util.Arrays; import java.util.conc
- 简介AccessibilityService的设计初衷是为了辅助有身体缺陷的群体使用Android应用,它的设计贯穿着Android的控件树
- 利用Java语言中的集合、Swing、线程等知识点编写一个坦克大战游戏。(1) 画出敌我坦克的原理:在坦克类里面有一个布尔类型变量good。
- switch语句的格式如下:(它的功能是选出一段代码执行) switch(整数选择因子) { case 整数值1 : 语句; break;
- 内部类1. 内部类简介(1) 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。(2) 内部类成员可以
- HttpServletRequest介绍HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HT
- 在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法。只允许我们定义publi
- 在开发Android应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样
- class文件中的常量池之前我们在讲class文件的结构时,提到了每个class文件都有一个常量池,常量池中存了些什么东西呢?字符串常量,类
- 首先,我们需要增加用户对该脚本的执行权限,即 String cmdstring = "chmod a+x test.sh
- 前言现在很多web应用,做过web项目的童鞋都知道,web结果由html+js+css组成,html结构都有一定的规范,数据动态交互可以通过
- 前言在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,例如使用devtool来实现
- 就像集成JDBC和其他ORM框架一样,Spring也集成了iBatis。1,配置iBatis客户模板iBatis的核心是com.ibatis
- 本文实例为大家分享了Unity实现3D循环滚动效果展示的具体代码,供大家参考,具体内容如下然后通过SetDepthAndPosition这个
- Object(四大方法):文章干货满满,耐性看完~~何为Object?首先先来看看官方对Object的介绍:在这里附上Java官方的查阅工具
- 一 . 得到这个对象的实例Connection con ;con = DriverManager.getConnection(url,use
- Java float和double精度范围大小要想理解float和double的取值范围和计算精度,必须先了解小数是如何在计算机中存储的:举
- JDK * 的过程JDK * 采用字节重组,重新生成对象来替代原始对象,以达到 * 的目的。JDK中有一个规范,在ClassPath下
- 1、什么是FeignFeign 是 Spring Cloud Netflix 组件中的一个轻量级 RESTful 的 HTTP 服务客户端,
- 前言在使用Java开发接口请求中,我们需要对请求进行进行统一返回值,这时候我们自己封装一个统一的Result返回类,下面就介绍下我用的这种的