MyBatis-Plus中的更新操作方式(通过id更新和条件更新)

 更新时间:2026年04月23日 09:30:56   作者:心态还需努力呀  
本文主要介绍了MyBatis-Plus中实体对象的更新操作,包括通过id更新和条件更新两种方式,详细解释了每种方式的方法使用、传入参数以及生成的SQL语句,并给出测试代码和运行结果

一、通过id更新

1.查看mapper继承的BaseMapper下通过id更新的方法updateById可看出参数传入的是一个对象。并且返回的是一个int类型的值, 该值的含义就是受影响的行数。

为0表示更新失败,作为以后开发中要处理的逻辑有用处。

如下图所示:

2.编写测试类testUpdateById方法,在方法中通过调用MP的updateById对数据库表中的名字和邮箱进行修改。

//测试通过id更新数据
@Test
public void testUpdateById(){
    User user=new User();
    user.setUserId(1);//更新id=?的数据
    //更新内容,可多个
    user.setUserName("心态");
    user.setUserEmail("3052273528@qq.com");
    int result = userMapper.updateById(user);
    System.out.println(result);

}

3.运行上面的方法得出结果,查看生成的sql语句:

如下图所示,可看到sql语句把表中的user_id字段作为条件,对user表中的user_name、user_email字段的值进行修改。

4.查询修改结果调用通过id查询的方法查询user_id=1的表信息是否发生改变。

//测试通过id查询
    @Test
    public void testSelectById(){
        User user = userMapper.selectById(1L);
        System.out.println(user);
    }

效果如下图所示,可看到用户名和邮箱已经变为了修改后的值,修改成功!:

二、条件更新

在做条件更新时我们要用到MP中的update方法,先来看下源码:要传入2个参数,第一个是实体,就是要进行修改的数据。

第二个传入的是Wrapper是要进行更新的条件。

int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

2.1 使用QueryWrapper进行条件更新

我们先测试QueryWrapper对数据进行条件更新:

在测试类中编写testUpdateQw()方法,修改用户状态为1的用户名改为(心态还需努力呀~)和邮箱改为(2132444@qq.com)。

我们把要更新的数据放到User类里,条件就需要用到QueryWrapper,首先需要new出来,然后用.eq调用方法,eq方法里也有两个参数,第一个是表字段名,第二个是该字段的值

如下图所示:

然后即可写出该方法的内容:

//根据条件更新QueryWrapper用法
    @Test
    public void testUpdateQw(){
        User user=new User();
        user.setUserName("心态还需努力呀~");
        user.setUserEmail("2132444@qq.com");
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        wrapper.eq("user_status","1");
        int result= userMapper.update(user, wrapper);
        System.out.println("result=> "+result);
    }

查看运行结果,通过生成的sql代码,可看出和我们编写的代码一样,条件是user_status字段,要修改的字段是user_name、user_email值。

注:再次强调eq方法中的第一个参数是数据库表的字段,而不是属性名。

2.2 使用UpdateWrapper进行条件更新

这次我们测试UpdateWrapper对数据进行条件更新:

在测试类中编写testUpdateUw()方法,修改用户状态为1的用户名改为(心态)和邮箱改为(8888888@qq.com)。

要修改的数据和条件都要放到UpdateWrapper,首先需要new出来,然后用.set调用方法,set方法里也有两个参数,第一个是表字段名,第二个是该字段的值。如下图所示:

但在写update参数时,因User设置值的功能被UpdateWrapper实现了,所以第一个参数为null即可,代码如下:

//根据条件更新UpdateWrapper用法
    @Test
    public void testUpdateUw(){
        UpdateWrapper<User> wrapper=new UpdateWrapper<>();
        wrapper.set("user_name","心态").set("user_email","8888888@qq.com")//更新的数据
                .eq("user_status","1");//更新的条件
        int result= userMapper.update(null, wrapper);
        System.out.println("result=> "+result);
    }

运行效果图,可看到和上面方法生成的sql语句是一样的,也能进行更新操作:

注:强调eq方法中的第一个参数是数据库表的字段,而不是属性名。 UpdateWrapper中的set方法也是一样的。

总结

更新操作也是我们在实际写代码中必不可少的,掌握MP的更新操作,不管是通过id更新还是条件更新中的QueryWrapper、UpdateWrapper来更新。学会的话会很方便以后的开发,节省大量的时间。

虽说条件更新中这两个方法实现的结果一样,但最好都掌握,都了解每个方法的用法。

在实际编写项目时习惯用哪个看个人。这也是更新操作的全部内容。

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

相关文章

  • Java中Arraylist动态扩容方法详解

    Java中Arraylist动态扩容方法详解

    ArrayList的列表对象实质上是存储在一个引用型数组里的,下面这篇文章主要给大家介绍了关于Java中Arraylist动态扩容方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • Springboot中加入druid连接池

    Springboot中加入druid连接池

    这篇文章主要介绍了Springboot中加入druid连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,下面来看看文章的具体内容吧
    2022-01-01
  • java 源码分析Arrays.asList方法详解

    java 源码分析Arrays.asList方法详解

    这篇文章主要介绍了java 源码分析Arrays.asList方法详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • java中ExecutorService创建方法总结

    java中ExecutorService创建方法总结

    在本篇文章里小编给大家整理了一篇关于java中ExecutorService创建方法总结,有兴趣的朋友们可以参考下。
    2021-01-01
  • 关于Springboot的日志配置

    关于Springboot的日志配置

    Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上,需要的朋友可以参考下
    2023-05-05
  • SpringBoot如何通过yml方式整合Mybatis

    SpringBoot如何通过yml方式整合Mybatis

    这篇文章主要介绍了SpringBoot如何通过yml方式整合Mybatis,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Spring Boot在Web应用中基于JdbcRealm安全验证过程

    Spring Boot在Web应用中基于JdbcRealm安全验证过程

    这篇文章主要为大家介绍了Spring Boot在Web应用中基于JdbcRealm安全验证过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-02-02
  • Java8内存模型PermGen Metaspace实例解析

    Java8内存模型PermGen Metaspace实例解析

    这篇文章主要介绍了Java8内存模型PermGen Metaspace实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • spring boot @PathVariable传递带反斜杠参数 / 的处理

    spring boot @PathVariable传递带反斜杠参数 / 的处理

    这篇文章主要介绍了spring boot @PathVariable传递带反斜杠参数 / 的处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringCloud读取Nacos配置中心报错及遇到的坑:Could not resolve placeholder ‘xxx’ in value ‘${xxx}

    SpringCloud读取Nacos配置中心报错及遇到的坑:Could not resolve placehold

    这篇文章主要介绍了SpringCloud读取Nacos配置中心报错:Could not resolve placeholder ‘xxx’ in value ‘${xxx},本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论