前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 集成 MybatisPlus 三——增加、修改、删除

SpringBoot 集成 MybatisPlus 三——增加、修改、删除

原创
作者头像
用户8100582
发布2023-10-30 22:38:29
9860
发布2023-10-30 22:38:29
举报
文章被收录于专栏:Java多线程

1 插入记录

1.1 以普通方式插入记录

向 User 表中插入一条记录。

创建一个 User 对象,调用 insert() 方法,即可实现向数据表中插入数据

代码语言:java
复制
@Test
public void addUserTest(){
    User user = new User();
    user.setUsername("韩梅梅");
    user.setGendar("女");
    user.setRemark("大堂经理");
    int insert = userMapper.insert(user);
    System.out.println(insert);
}

执行后,可以在控制台中看到 MybatisPlus 向数据库发送的 SQL 语句如下:

==> Preparing: INSERT INTO user ( id, username, gendar, remark ) VALUES ( ?, ?, ?, ? )

==> Parameters: -154062847(Integer), 韩梅梅(String), 女(String), 大堂经理(String)

<== Updates: 1

因为没有对 ID 属性进行指定,程序随机生成了一条内容,这显然不是我们所期望的,可以在执行程序时设置该字段内容。

代码语言:java
复制
@Test
public void addUserTest(){
    User user = new User();
    user.setId(7);
    user.setUsername("韩梅梅");
    user.setGendar("女");
    user.setRemark("大堂经理");
    int insert = userMapper.insert(user);
    System.out.println(insert);
}

数据入库后效果如下:

那么,如果id为主键,一般为自增序列,要如何插入呢?

1.2 以字段自增方式插入记录

1.2.1 修改数据表

原数据表创建语句为:

CREATE TABLE User (

id INT NOT NULL,

username VARCHAR(50) NULL DEFAULT NULL,

gendar CHAR(2) NULL DEFAULT NULL,

remark VARCHAR(50) NULL DEFAULT NULL

);

在数据表中添加 ID 字段为主键,并且将该字段设置为自动增长:

ALTER TABLE user ADD PRIMARY KEY(id);

ALTER TABLE user modify id INT(11) AUTO_INCREMENT;

1.2.2 修改实体类

修改实体类属性 id 的注解,使用 @TableId 标识出id字段为主键,并且将该字段设置为自动增长 IdType.AUTO

修改后的 User 类如下:

代码语言:java
复制
package com.test.pojo;

import com.baomidou.mybatisplus.annotation.*;

@TableName(value = "user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    Integer id;
    String username;
    String gendar;
    String remark;

    @TableField(value = "COUNT(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
    Integer count;

    public Integer getGen() {
        return count;
    }

    public void setGen(Integer gen) {
        this.count = gen;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getGendar() {
        return gendar;
    }

    public void setGendar(String gendar) {
        this.gendar = gendar;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + ''' +
                ", gendar='" + gendar + ''' +
                ", remark='" + remark + ''' +
                ", count=" + count +
                '}';
    }
}

1.2.3 插入数据

代码语言:java
复制
@Test
public void addUserTest(){
    User user = new User();
    user.setUsername("李磊");
    user.setGendar("男");
    user.setRemark("英语老师");
    int insert = userMapper.insert(user);
    System.out.println(insert);
}

在控制台中看到 MybatisPlus 向数据库发送的 SQL 语句中,不再有ID字段了:

==> Preparing: INSERT INTO user ( username, gendar, remark ) VALUES ( ?, ?, ? )

==> Parameters: 李磊(String), 男(String), 英语老师(String)

<== Updates: 1

插入后数据表中,新记录的ID自动设置为8:

2 修改记录

2.1 根据ID修改

调用 updateById() 方法修改记录,方法中必须传入带有ID属性的对象。

代码语言:java
复制
@Test
public void updateUserById(){
    User user = new User();
    user.setId(8);
    user.setRemark("美术老师");
    int insert = userMapper.updateById(user);
    System.out.println(insert);
}

这种方式可对指定id的记录进行修改,因此,只能修改一条记录。

2.2 根据筛选条件修改

当需要按照指定条件筛选,并对筛选后的记录进行批量修改时,就要考虑这种使用方式。

需要先创建一个 UpdateWrapper 对象,需要修改的内容可以使用 set() 方法进行设置,筛选条件和查询时类似。

注意: 在 set() 方法及 UpdateWrapper 中引用的字符串,都是数据表中的列名,而不是实体类的属性名。

比如:对 remark 字段中包含“人员”信息的,将其 remark 修改为 “职能部门人员”:

代码语言:java
复制
@Test
public void updateUserTest(){
    User user = new User();
    UpdateWrapper<User> wrapper = new UpdateWrapper<>();
    wrapper.set("remark", "职能部门人员");
    wrapper.like("remark", "人员");
    int insert = userMapper.update(new User(), wrapper);
    System.out.println(insert);
}

在控制台可以看到执行的SQL语句如下:

==> Preparing: UPDATE user SET remark=? WHERE (remark LIKE ?)

==> Parameters: 职能部门人员(String), %人员%(String)

<== Updates: 4

执行后数据内容变化如下:

3 删除记录

3.1 根据ID删除

调用 deleteById() 方法,传入仅设置了id属性的对象,此方法可删除一条记录。

删除 id 为 -154062847 的记录:

代码语言:java
复制
@Test
public void deleteUserById(){
    User user = new User();
    user.setId(-154062847);
    int res = userMapper.deleteById(user);
    System.out.println(res);
}

==> Preparing: DELETE FROM user WHERE id=?

==> Parameters: -154062847(Integer)

<== Updates: 1

使用对象的方式来删除记录,需要创建对象,还是有些麻烦,也可以省去对象的创建,直接根据id来删除。

代码语言:java
复制
@Test
public void deleteUserById(){
    int res = userMapper.deleteById(1);
    System.out.println(res);
}

3.2 根据ID列表删除

如果想要根据多个ID批量删除,可以调用 deleteBatchIds(),传入集合类对象,在集合类中设置想要批量删除的id集合。

删除 id 分别为 1,2 的记录:

代码语言:java
复制
@Test
public void deleteUserByIds(){
    List<Integer> ids = new ArrayList<>();
    ids.add(1);
    ids.add(2);
    int res = userMapper.deleteBatchIds(ids);
    System.out.println(res);
}

==> Preparing: DELETE FROM user WHERE id IN ( ? , ? )

==> Parameters: 1(Integer), 2(Integer)

<== Updates: 2

3.3 根据指定字段内容删除

将指定字段及对应内容,放入到 Map 中,调用 deleteByMap() 方法,删除对应记录。

需要注意的是,Map 中所有字段都为“且”的关系。Map 对象中键,都是数据表中的列名,不是实体类的对象名。

删除 username 为 “lisi” 并且 remark 为 “大堂经理” 的记录:

代码语言:java
复制
@Test
public void deleteUserByMap(){
    Map<String, Object> map = new HashMap<>();
    map.put("username", "lisi");
    map.put("remark", "大堂经理");
    int res = userMapper.deleteByMap(map);
    System.out.println(res);
}

==> Preparing: DELETE FROM user WHERE remark = ? AND username = ?

==> Parameters: 大堂经理(String), lisi(String)

<== Updates: 0

通过这种方式可以删除满足条件的单条记录或批量记录。

3.4 根据查询结果删除

调用 delete() 方法,并传入 QueryWrapper 对象,在 QueryWrapper 对象中如同查询一样,将查询出的记录进行删除。

删除 remark 中包含了 “职能” 字符串的所有记录:

代码语言:java
复制
@Test
public void deleteUserByWrapper(){
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.like("remark", "职能");
    int res = userMapper.delete(wrapper);
    System.out.println(res);
}

==> Preparing: DELETE FROM user WHERE (remark LIKE ?)

==> Parameters: %职能%(String)

<== Updates: 3

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 插入记录
    • 1.1 以普通方式插入记录
      • 1.2 以字段自增方式插入记录
        • 1.2.1 修改数据表
        • 1.2.2 修改实体类
        • 1.2.3 插入数据
    • 2 修改记录
      • 2.1 根据ID修改
        • 2.2 根据筛选条件修改
        • 3 删除记录
          • 3.1 根据ID删除
            • 3.2 根据ID列表删除
              • 3.3 根据指定字段内容删除
                • 3.4 根据查询结果删除
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档