MyBatis-Plus 常用增删改查操作指南

3 分钟阅读73 次浏览

MyBatis-Plus 常用增删改查操作指南

MyBatis-Plus 提供了便捷的 CRUD 接口,能够大幅减少重复的 SQL 编写工作。本文梳理了最常用的插入、查询、修改和删除方法,并给出了可直接使用的代码示例。

一、插入(Insert)

1. 普通插入(全部字段)

该方法会将实体对象中所有字段(包括值为 null 的字段)插入数据库,通常用于需要明确写入每一个列的场景。

User user = new User();
user.setUsername("张三");
user.setPassword("123456");
user.setEmail("zhangsan@qq.com");

// 插入所有字段,包括 null
int rows = userMapper.insert(user);

返回值为受影响行数(1 表示成功,0 表示失败)。

2. 选择性插入(只插入非空字段,推荐)

insertSelective 仅将非空字段写入数据库,能够避免覆盖数据库表的默认值,是日常开发中最常用的插入方式。

User user = new User();
user.setUsername("张三");
// 密码、邮箱未设置,不会插入到数据库
int rows = userMapper.insertSelective(user);

二、查询(Select)

1. 根据 ID 查询单条记录

// 根据 id=1001 查询用户
User user = userMapper.selectOneById(1001L);

2. 查询全部数据

List<User> userList = userMapper.selectAll();

3. 条件查询

利用 QueryWrapper 构建灵活的查询条件,支持等于、大于等于、模糊查询、排序等操作。

// 构造查询条件
QueryWrapper wrapper = QueryWrapper.create()
    .eq(User::getUsername, "张三")     // 等于
    .ge(User::getId, 10)              // 大于等于
    .like(User::getEmail, "@qq.com")  // 模糊查询
    .orderByDesc(User::getId);        // 排序

// 查询列表
List<User> list = userMapper.selectList(wrapper);

4. 分页查询

// 第 1 页,每页 10 条
Page<User> page = userMapper.selectPage(Page.of(1, 10), wrapper);

// 获取分页结果
List<User> records = page.getRecords();  // 当前页数据
long total = page.getTotal();            // 总记录数

三、修改(Update)

1. 根据 ID 更新全部字段

User user = new User();
user.setId(1001L);       // 必须指定 ID
user.setUsername("张三新名字");
user.setPassword("新密码");

// 根据 ID 更新所有字段
int rows = userMapper.update(user);

2. 根据 ID 选择性更新(只改非空字段,推荐)

User user = new User();
user.setId(1001L);
user.setUsername("只修改用户名");

// 只更新非空字段
int rows = userMapper.updateSelective(user);

3. 条件更新

通过 UpdateWrapper 设置具体的更新列和条件,实现灵活的条件式更新。

UpdateWrapper wrapper = UpdateWrapper.create()
    .set(User::getUsername, "新名字")
    .eq(User::getId, 1001L);

int rows = userMapper.update(wrapper);

四、删除(Delete)

1. 根据 ID 删除

int rows = userMapper.deleteById(1001L);

2. 条件删除

QueryWrapper wrapper = QueryWrapper.create()
    .eq(User::getUsername, "张三");

int rows = userMapper.deleteByQuery(wrapper);

五、核心方法速查

在日常开发中,以下示例覆盖了最常用的增、删、改、查以及分页、条件构造场景,可直接作为模板使用:

// ---- 新增 ----
User newUser = new User();
newUser.setUsername("李四");
newUser.setEmail("lisi@example.com");
userMapper.insertSelective(newUser);   // 只插入非空字段

// ---- 查询 ----
User user = userMapper.selectOneById(1001L);                     // 主键查询
List<User> allUsers = userMapper.selectAll();                    // 全表查询

// 条件查询 + 分页
QueryWrapper<User> query = QueryWrapper.create()
        .like(User::getUsername, "张")
        .ge(User::getCreateTime, someDate)
        .orderByDesc(User::getId);
Page<User> page = userMapper.selectPage(Page.of(1, 10), query);

// ---- 修改 ----
User updateUser = new User();
updateUser.setId(1001L);
updateUser.setUsername("新用户名");
userMapper.updateSelective(updateUser);                          // 只更新非空字段

// ---- 删除 ----
userMapper.deleteById(1001L);                                    // 主键删除

// 条件删除
QueryWrapper<User> deleteWrapper = QueryWrapper.create()
        .eq(User::getStatus, "INACTIVE");
userMapper.deleteByQuery(deleteWrapper);
  • insertSelectiveupdateSelective 只处理非空字段,既安全又高效,应优先使用。
  • 条件查询和分页查询可通过 QueryWrapper 灵活扩展,满足复杂业务场景。

评论

加载评论中...