MyBatis-Plus常用方法

MyBatis-Plus 是 MyBatis 的增强工具包,提供了许多便捷的数据库操作方法和增强功能,极大地简化了与数据库的交互。以下是一些 MyBatis-Plus 中常用的方法及其使用方法:

常用方法

  1. 通用 CRUD 方法

    • insert(entity):插入一条记录
    • updateById(entity):根据ID更新一条记录
    • deleteById(id):根据ID删除一条记录
    • selectById(id):根据ID查询一条记录
    • selectList(wrapper):根据条件查询记录列表
    • selectPage(page, wrapper):根据条件分页查询记录列表
  2. 条件构造器 Wrapper

    • QueryWrapper:用于构建查询条件
    • UpdateWrapper:用于构建更新条件
    • LambdaQueryWrapper:支持 Lambda 表达式的查询条件构造器
  3. 分页查询

    • Page<T>:分页查询结果的封装类,包含总数、当前页数据等信息
  4. 批量操作

    • insertBatch(entities):批量插入记录
    • updateBatchById(entities):根据ID批量更新记录
  5. 逻辑删除

    • deleteById(id):物理删除
    • deleteByIdWithFill(entity):逻辑删除,填充删除字段(如 deleted
  6. 乐观锁

    • updateById(entity):支持乐观锁的更新方法,需要在实体类中使用 @Version 注解标记乐观锁字段
  7. 自动填充

    • @TableField(fill = FieldFill.INSERT):自动填充字段,可用于创建时间、更新时间等场景
  8. 常用条件查询

    • eq(column, value):等于 (=),其中 column 是字段名,value 是要比较的值。
    • ne(column, value):不等于 (<> 或 !=)。
    • gt(column, value):大于 (>).
    • ge(column, value):大于等于 (>=).
    • lt(column, value):小于 (<).
    • le(column, value):小于等于 (<=).
    • like(column, value):模糊匹配 (LIKE),自动添加 % 符号。
    • likeLeft(column, value):左模糊匹配 (LIKE),只在值后面添加 %
    • likeRight(column, value):右模糊匹配 (LIKE),只在值前面添加 %
    • in(column, Collection<?> values):在给定的集合中 (IN)。
    • notIn(column, Collection<?> values):不在给定的集合中 (NOT IN)。
    • between(column, Object val1, Object val2):在两个值之间 (BETWEEN 和 AND)。
    • notBetween(column, Object val1, Object val2):不在两个值之间 (NOT BETWEEN 和 AND)。
    • isNull(column):检查字段是否为 NULL
    • isNotNull(column):检查字段是否不为 NULL
    • orderByAsc(column):按字段升序排序。
    • orderByDesc(column):按字段降序排序。
    • last(String sql):执行原生 SQL 片段,如 LIMITOFFSET 等。
    • or():开始一个新的 OR 条件组。
    • and():开始一个新的 AND 条件组。

使用示例

1. 插入一条记录
User user = new User(); 
user.setName("John"); 
user.setAge(25); 
user.setEmail("john@example.com"); 
userMapper.insert(user);
2. 根据ID查询一条记录
User user = userMapper.selectById(1L);
3. 条件查询
// 创建条件构造器 
QueryWrapper<User> wrapper = new QueryWrapper<>(); 
wrapper.eq("name","John").between("age", 20, 30).orderByDesc("age"); 
// 查询符合条件的记录列表 
List<User> userList = userMapper.selectList(wrapper);
4. 分页查询
// 创建分页对象 
Page<User> page = new Page<>(1, 10); 
// 第1页,每页10条记录 
// 创建条件构造器 
QueryWrapper<User> wrapper = new QueryWrapper<>(); 
wrapper.gt("age", 20); 
// 分页查询 
Page<User> userPage = userMapper.selectPage(page, wrapper); 
// 获取分页后的数据列表 
List<User> records = userPage.getRecords();
5. 更新记录
User user = userMapper.selectById(1L); 
user.setAge(26); 
userMapper.updateById(user);
6. 删除记录
userMapper.deleteById(1L);
7. 乐观锁更新
User user = userMapper.selectById(1L); 
user.setAge(user.getAge() + 1); 
userMapper.updateById(user);
8. 逻辑删除
userMapper.deleteByIdWithFill(new User(1L)); 
// 填充逻辑删除字段
9. LambdaQueryWrapper

假设我们有一个 User 类,它有 id, name, age, gender 等属性。

1import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
2
3// 假设这是我们的 User 映射器接口
4interface UserMapper extends BaseMapper<User> {}
5
6// 使用 LambdaQueryWrapper 查询
7public List<User> findUsers() {
8    // 创建一个 LambdaQueryWrapper 对象
9    LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
10    
11    // 添加查询条件,这里查询 name 为 "John Doe" 的用户
12    queryWrapper.eq(User::getName, "John Doe");
13    
14    // 执行查询并返回结果列表
15    return userMapper.selectList(queryWrapper);
16}

链式调用

你可以连续添加多个查询条件,利用 LambdaQueryWrapper 的链式调用特性:

1public List<User> findUsersByCriteria() {
2    LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
3    
4    // 可以连续添加多个条件
5    queryWrapper
6        .eq(User::getName, "John Doe")
7        .gt(User::getAge, 30)
8        .like(User::getGender, "M");
9    
10    return userMapper.selectList(queryWrapper);
11}

动态查询条件

如果查询条件基于运行时变量或逻辑判断,可以使用 ObjectUtils.isNotEmpty() 或者自定义的逻辑来决定是否添加某个条件:

1public List<User> findUsersWithDynamicConditions(User criteria) {
2    LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
3    
4    if (ObjectUtils.isNotEmpty(criteria.getName())) {
5        queryWrapper.like(User::getName, criteria.getName());
6    }
7    if (ObjectUtils.isNotEmpty(criteria.getAge())) {
8        queryWrapper.eq(User::getAge, criteria.getAge());
9    }
10    
11    return userMapper.selectList(queryWrapper);
12}

排序

你还可以添加排序条件:

1public List<User> findUsersOrderByAge() {
2    LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
3    
4    // 添加排序条件
5    queryWrapper.orderByAsc(User::getAge);
6    
7    return userMapper.selectList(queryWrapper);
8}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值