MyBatis根据条件批量修改字段的方式

 更新时间:2023年02月22日 15:08:52   作者:猿陆柒  
这篇文章主要介绍了MyBatis根据条件批量修改字段的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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语句。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring boot整合security详解

    Spring boot整合security详解

    Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,本文主要介绍了SpringBoot整合Security安全框架的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 详解spring boot整合JMS(ActiveMQ实现)

    详解spring boot整合JMS(ActiveMQ实现)

    本篇文章主要介绍了详解spring boot整合JMS(ActiveMQ实现),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • SpringBoot项目中java -jar xxx.jar没有主清单属性的解决方法

    SpringBoot项目中java -jar xxx.jar没有主清单属性的解决方法

    这篇文章主要给大家介绍了SpringBoot项目中java -jar xxx.jar没有主清单的解决方法,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • java后端进行跨域的几种方式小结

    java后端进行跨域的几种方式小结

    本文主要介绍了java后端进行跨域的几种方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Java实现暴力匹配算法

    Java实现暴力匹配算法

    暴力匹配算法是一种简单的字符串匹配算法,本文主要介绍了Java实现暴力匹配算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java8使用Supplier启动ScheduledThread代码实例

    Java8使用Supplier启动ScheduledThread代码实例

    这篇文章主要介绍了Java8使用Supplier启动ScheduledThread详解,项目开启立即启动定时任务是很多项目都会遇到的一个需求,如何利用Java提供的函数优雅的写出来十分考验一个人的功底,需要的朋友可以参考下
    2024-01-01
  • Java实现入参数据批量数据校验详解

    Java实现入参数据批量数据校验详解

    在业务处理中一般入参是单条数据,这样数据校验比较容易,但是这种方法对于集合数据的校验不适用,下面我们就来看看如何对入参数据进行批量数据校验吧
    2024-02-02
  • 详解Java中如何定义和访问静态字段和方法

    详解Java中如何定义和访问静态字段和方法

    在面向对象的程序设计中,我们通常使用类来创建对象,类中有许多成员变量和方法,它们是直接属于对象实例的,与之对应的还有一类成员,那就是静态成员,本文就来和大家聊聊Java是如何定义访问静态成员的吧
    2023-05-05
  • Java中的匿名对象定义与用法实例分析

    Java中的匿名对象定义与用法实例分析

    这篇文章主要介绍了Java中的匿名对象定义与用法,结合实例形式分析了java匿名对象的概念、原理、定义与相关使用注意事项,需要的朋友可以参考下
    2019-08-08
  • 用Java实现聊天程序

    用Java实现聊天程序

    这篇文章主要为大家详细介绍了用Java实现聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09

最新评论