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);
- insertSelective 和 updateSelective 只处理非空字段,既安全又高效,应优先使用。
- 条件查询和分页查询可通过
QueryWrapper灵活扩展,满足复杂业务场景。
评论
加载评论中...