项目实战:关于MyBatis-Plus使用LambdaQueryWrapper的查询

在 MyBatis-Plus 中,LambdaQueryWrapper 是一种常用的查询构造器,它基于 Lambda 表达式来构建查询条件。使用 LambdaQueryWrapper 可以避免字符串拼接的错误,提高代码的可读性和类型安全性。以下是 LambdaQueryWrapper 方法的常见用法。

  1. 创建 LambdaQueryWrapper 实例
    可以通过 LambdaQueryWrapper 的构造方法来创建一个实例,传入实体类的 Class 类型:
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
  1. 常用方法
2.1 eq(), ne(), gt(), lt(), ge(), le()
这些方法用来构建简单的条件。

eq:等于
ne:不等于
gt:大于
lt:小于
ge:大于等于
le:小于等于
queryWrapper.eq(User::getAge, 25); // age = 25
queryWrapper.ne(User::getName, "John"); // name != "John"
queryWrapper.gt(User::getAge, 20); // age > 20
queryWrapper.lt(User::getAge, 30); // age < 30
queryWrapper.ge(User::getAge, 18); // age >= 18
queryWrapper.le(User::getAge, 60); // age <= 60

2.2 like(), notLike()
用于字符串模糊匹配。

queryWrapper.like(User::getName, "Jo"); // name LIKE "%Jo%"
queryWrapper.notLike(User::getName, "John"); // name NOT LIKE "%John%"

2.3 in(), notIn()
用于集合条件查询。

queryWrapper.in(User::getAge, 20, 25, 30); // age IN (20, 25, 30)
queryWrapper.notIn(User::getAge, 40, 50); // age NOT IN (40, 50)

2.4 between(), notBetween()
用于范围查询。

queryWrapper.between(User::getAge, 20, 30); // age BETWEEN 20 AND 30
queryWrapper.notBetween(User::getAge, 40, 50); // age NOT BETWEEN 40 AND 50

2.5 isNull(), isNotNull()
用于判断字段是否为 null。

queryWrapper.isNull(User::getEmail); // email IS NULL
queryWrapper.isNotNull(User::getPhone); // phone IS NOT NULL

2.6 orderByAsc(), orderByDesc()
用于排序。


queryWrapper.orderByAsc(User::getAge); // 按年龄升序排序
queryWrapper.orderByDesc(User::getAge); // 按年龄降序排序

2.7 likeLeft(), likeRight()
用于左右模糊匹配。

queryWrapper.likeLeft(User::getName, "Jo"); // name LIKE "Jo%"
queryWrapper.likeRight(User::getName, "Jo"); // name LIKE "%Jo"

2.8 select()
选择需要查询的字段。


queryWrapper.select(User::getName, User::getAge); // 只查询 name 和 age 

字段
2.9 groupBy(), having()
用于分组和聚合查询。

queryWrapper.groupBy(User::getAge); // 按年龄分组
queryWrapper.having("count(id) > 10"); // 聚合条件

2.10 nested()
用于嵌套条件查询。

queryWrapper.nested(w -> w.lt(User::getAge, 30).or().gt(User::getAge, 50)); // (age < 30 OR age > 50)
  1. 示例:综合查询
    假设有一个 User 实体类,包含 id, name, age, email 等字段,以下是一个查询示例,查找年龄大于20且小于30的用户,按年龄升序排序,且查询字段为 name 和 age。
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
    .gt(User::getAge, 20)
    .lt(User::getAge, 30)
    .orderByAsc(User::getAge)
    .select(User::getName, User::getAge);

List<User> users = userMapper.selectList(queryWrapper);
  1. 使用 and() 和 or()
    可以使用 and() 和 or() 方法进行条件的组合。
queryWrapper.and(w -> w.gt(User::getAge, 20).lt(User::getAge, 30)); // (age > 20 AND age < 30)
queryWrapper.or(w -> w.eq(User::getStatus, 1).eq(User::getStatus, 2)); // (status = 1 OR status = 2)

总结
LambdaQueryWrapper 是 MyBatis-Plus 提供的强大查询工具,可以通过 Lambda 表达式构造类型安全的查询条件。
提供了丰富的方法,支持常见的查询操作,如 eq(), like(), in(), orderBy() 等,减少了手动拼接 SQL 的复杂度。
支持组合查询、排序、分组等复杂查询功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值