MybatisPlusUpdate详解

MybatisPlus是Mybatis的增强工具,它在Mybatis的基础上添加了很多有用的功能,包括快速CRUD操作。其中,update操作也是非常常见的一个操作,而MybatisPlus提供的update方法也有很多种用法,本篇文章将从不同角度对其中的update方法进行详解。

一、MybatisPlusUpdateById

updateById是MybatisPlus对单表更新数据的操作,其基本语法如下:


int updateById(T entity);

其中,T代表实体类,entity代表要更新的对象。这个方法会根据对象的id,自动匹配出要更新的行,然后更新对应的数据。下面是一个示例:


@Autowired
private UserMapper userMapper;

public void updateUserById(User user) {
    userMapper.updateById(user);
}

上面的代码中,我们通过自动注入的UserMapper,调用updateById方法更新User对象。

二、MybatisPlusUpdate多参无效

当我们要更新多个字段时,可以使用以下两种方法。第一种方法是在实体类中,通过get和set方法来一个一个地设置更新的值,这种方法比较麻烦。第二种方法是使用多参的update方法,但需要注意的是,MybatisPlus的多参update方法只能更新一个字段,不能更新多个字段,否则会抛出异常。以下是一个错误示例:


@Autowired
private UserMapper userMapper;

public void updateUserByIdAndName(String id, String name) {
    userMapper.update(null,
            new UpdateWrapper<User>().eq("id", id).set("name", name));
}

上面的代码中,我们尝试更新用户id和name,但是会抛出异常。如果我们要更新多个字段,可以使用下面即将介绍的update方法。

三、MybatisPlusUpdateWrapper

如果我们要在更新时使用条件,可以使用MybatisPlus提供的UpdateWrapper来进行更新。UpdateWrapper可以实现条件构造,可以使用类似SQL的语法来构造查询和更新条件,以下是一个示例:


@Autowired
private UserMapper userMapper;

public void updateUserByNameAndAge(String name, Integer age) {
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("name", name).set("age", age);
    userMapper.update(null, wrapper);
}

上面的代码中,我们使用UpdateWrapper来构造查询条件,然后使用set方法来设置要更新的值,最后通过update方法进行更新。

四、MybatisPlusUpdate为null不set

如果我们在更新时不希望把null值设置到数据库中,可以使用以下代码来设置:


@Autowired
private UserMapper userMapper;

public void updateUser(User user) {
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("id", user.getId());
    if (user.getName() != null) {
        wrapper.set("name", user.getName());
    }
    if (user.getAge() != null) {
        wrapper.set("age", user.getAge());
    }
    userMapper.update(null, wrapper);
}

上面的代码中,我们使用UpdateWrapper来构造查询条件,然后在set方法之前判断字段值是否为null,如果不是null,则调用set方法进行更新。

五、MybatisPlusUpdateWrapper的用法

在使用UpdateWrapper时,我们还可以使用很多其他的方法来构造查询条件,以下是一些常用的方法:

  • eq:等于,相当于SQL中的=
  • ne:不等于,相当于SQL中的!=
  • gt:大于,相当于SQL中的>
  • ge:大于等于,相当于SQL中的>=
  • lt:小于,相当于SQL中的<
  • le:小于等于,相当于SQL中的<=
  • like:模糊查询,相当于SQL中的like
  • in:IN查询,相当于SQL中的in

以下是一个示例:


@Autowired
private UserMapper userMapper;

public void updateUserByWrapper(String name, String address) {
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.eq("name", name).like("address", address);
    wrapper.set("age", 18);
    userMapper.update(null, wrapper);
}

上面的代码中,我们使用UpdateWrapper来构造查询条件,包括名字和地址的值,然后使用set方法来更新年龄字段的值为18。

总结

本文针对MybatisPlus的update方法,从updateById、多参无效、UpdateWrapper、为null不set和UpdateWrapper的用法5个方面进行了详细的阐述。通过本文的讲解,相信读者已经对MybatisPlus的update方法有了更深入的理解,能够更好地在项目中使用。

原创文章,作者:KQPX,如若转载,请注明出处:https://www.506064.com/n/144465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
KQPXKQPX
上一篇 2024-10-25 13:53
下一篇 2024-10-25 13:53

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论