MyBatis Plus的条件构造器

MyBatis Plus(简称MP)是MyBatis的增强工具,旨在简化开发、提高效率。它提供了许多便捷的功能,其中之一就是条件构造器(Wrapper)。条件构造器用于构建SQL查询条件,使得开发者可以通过编程方式动态地生成复杂的SQL语句,而无需手动编写SQL字符串。本文将详细讲解MyBatis Plus的条件构造器,包括其基本概念、常用方法以及实际应用场景。

1. 基本概念

MyBatis Plus的条件构造器主要由以下几个核心类组成:

  • AbstractWrapper:所有条件构造器的抽象基类,提供了基本的条件构造方法。
  • QueryWrapper:用于查询条件构造。
  • UpdateWrapper:用于更新条件构造。
  • LambdaQueryWrapper:使用Lambda表达式进行查询条件构造。
  • LambdaUpdateWrapper:使用Lambda表达式进行更新条件构造。

这些类都继承自AbstractWrapper,因此它们共享一些基本的条件构造方法。

2. 常用方法

2.1 基本条件构造方法
  • eq:等于(=)
  • ne:不等于(<>)
  • gt:大于(>)
  • ge:大于等于(>=)
  • lt:小于(<)
  • le:小于等于(<=)
  • like:模糊匹配(LIKE)
  • notLike:不模糊匹配(NOT LIKE)
  • in:在集合中(IN)
  • notIn:不在集合中(NOT IN)
  • isNull:为空(IS NULL)
  • isNotNull:不为空(IS NOT NULL)
  • between:在范围内(BETWEEN)
  • notBetween:不在范围内(NOT BETWEEN)
2.2 逻辑条件构造方法
  • and:逻辑与(AND)
  • or:逻辑或(OR)
  • nested:嵌套条件
2.3 其他方法
  • orderByAsc:按升序排序
  • orderByDesc:按降序排序
  • groupBy:分组
  • having:分组后过滤
  • select:指定查询字段

3. 示例代码

3.1 使用QueryWrapper进行查询
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25)
            .like("name", "John")
            .orderByDesc("create_time");
List<User> userList = userMapper.selectList(queryWrapper);

上述代码构建了一个查询条件,查询年龄等于25且名字包含"John"的用户,并按创建时间降序排序。

3.2 使用UpdateWrapper进行更新
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("age", 25)
              .set("status", 1);
userMapper.update(null, updateWrapper);

上述代码构建了一个更新条件,将年龄等于25的用户的状态更新为1。

3.3 使用LambdaQueryWrapper进行查询
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 25)
                   .like(User::getName, "John")
                   .orderByDesc(User::getCreateTime);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);

上述代码使用Lambda表达式构建了一个查询条件,查询年龄等于25且名字包含"John"的用户,并按创建时间降序排序。

3.4 使用LambdaUpdateWrapper进行更新
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getAge, 25)
                    .set(User::getStatus, 1);
userMapper.update(null, lambdaUpdateWrapper);

上述代码使用Lambda表达式构建了一个更新条件,将年龄等于25的用户的状态更新为1。

4. 实际应用场景

4.1 动态条件查询

在实际开发中,查询条件往往是动态的,可能根据用户输入或业务逻辑变化。使用条件构造器可以轻松应对这种情况。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (user.getAge() != null) {
    queryWrapper.eq("age", user.getAge());
}
if (StringUtils.isNotBlank(user.getName())) {
    queryWrapper.like("name", user.getName());
}
List<User> userList = userMapper.selectList(queryWrapper);

上述代码根据用户对象的属性动态构建查询条件。

4.2 复杂条件查询

有时候需要构建复杂的查询条件,例如多层嵌套的条件。条件构造器提供了nested方法来实现这一点。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.nested(w -> w.eq("age", 25).or().eq("age", 30))
            .and(w -> w.like("name", "John").or().like("name", "Jane"));
List<User> userList = userMapper.selectList(queryWrapper);

上述代码构建了一个复杂的查询条件,查询年龄等于25或30且名字包含"John"或"Jane"的用户。

4.3 分页查询

结合MyBatis Plus的分页插件,可以轻松实现分页查询。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25);
Page<User> page = new Page<>(1, 10);
Page<User> userPage = userMapper.selectPage(page, queryWrapper);

上述代码查询年龄等于25的用户,并进行分页,每页10条记录。

5. 总结

MyBatis Plus的条件构造器极大地简化了SQL条件构建的过程,使得开发者可以通过编程方式动态地生成复杂的SQL语句。无论是简单的等值查询,还是复杂的嵌套条件查询,条件构造器都能轻松应对。通过结合Lambda表达式,代码的可读性和维护性也得到了显著提升。在实际开发中,合理利用条件构造器可以大大提高开发效率,减少出错的可能性。

希望本文对您理解和使用MyBatis Plus的条件构造器有所帮助。

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值