mybatis-plus 如何使用Lambda查询
时间: 2025-06-20 15:19:50 浏览: 10
<think>嗯,用户想了解MyBatis-Plus中使用Lambda进行查询的方法和示例。首先,我得回忆一下MyBatis-Plus的相关文档,尤其是Lambda查询的部分。记得Lambda查询主要是通过LambdaQueryWrapper或者LambdaUpdateWrapper来实现的,这样可以避免硬编码字段名,提高代码的可读性和安全性。
接下来,我需要整理Lambda查询的基本步骤。首先用户需要创建LambdaQueryWrapper实例,然后通过lambda表达式指定查询条件。例如,eq对应等于,like对应模糊查询,between是范围查询等等。可能需要举几个常见的例子,比如根据姓名和年龄查询,或者组合多个条件的情况。
然后,用户可能需要知道如何链式调用这些方法,让代码看起来更简洁。比如连续使用eq和gt这样的方法,形成链式结构。另外,排序和分页也是常见的需求,应该包含如何使用orderBy和last方法添加排序语句,或者结合Page对象进行分页查询。
还要记得提到Lambda查询的优势,比如字段名引用是通过实体类的get方法,这样在字段名变化时,IDE会提示错误,减少运行时错误的风险。同时,Lambda表达式让代码更易读,维护起来更方便。
然后需要检查是否有相关的示例代码,确保语法正确,比如是否正确使用了LambdaQueryWrapper的创建,以及条件方法的调用。例如,User::getName这样的方法引用是否正确,以及条件拼接的方式是否正确,比如and和or的使用。
另外,用户可能对自定义SQL和Lambda查询的结合使用感兴趣。比如在复杂查询时,可能需要使用@Select注解自定义SQL,同时结合Lambda的条件构造。这时候可能需要引用文档中的例子,说明如何在自定义SQL中使用条件构造器。
还需要注意,用户提供的引用中有提到@Select注解的使用,比如直接编写SQL语句并引用参数,这可能和Lambda查询分开使用,但在某些情况下可以结合。需要明确两者的适用场景,Lambda查询更适合动态条件组合,而自定义SQL适合固定的复杂查询。
可能用户还会关心性能方面的问题,比如生成的SQL是否高效,或者是否有常见的陷阱需要避免。例如,使用like操作时是否正确地添加了通配符%,或者在分页查询时是否正确配置了分页插件。
最后,生成相关问题时要围绕Lambda查询的使用场景、高级功能、与普通Wrapper的区别、事务支持以及性能优化等方面,帮助用户进一步深入了解。</think>### MyBatis-Plus Lambda 查询使用方法及示例
#### 1. Lambda 查询核心类
MyBatis-Plus 的 Lambda 查询通过 `LambdaQueryWrapper<T>` 或 `LambdaUpdateWrapper<T>` 实现,支持类型安全的字段引用。例如:
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
```
#### 2. 基本条件构造示例
```java
// 查询 name = "张三" 且 age > 18 的记录
wrapper.eq(User::getName, "张三")
.gt(User::getAge, 18);
// 模糊查询 name 包含"王"的记录
wrapper.like(User::getName, "王"); // 生成 SQL: WHERE name LIKE '%王%' [^2]
```
#### 3. 链式调用与复杂条件
```java
// 组合条件 (age < 20 OR age > 30) AND status = 1
wrapper.and(wq -> wq.lt(User::getAge, 20).or().gt(User::getAge, 30))
.eq(User::getStatus, 1);
```
#### 4. 排序与分页
```java
// 按年龄倒序
wrapper.orderByDesc(User::getAge);
// 分页查询(需先配置分页插件)
Page<User> page = new Page<>(1, 10);
userMapper.selectPage(page, wrapper);
```
#### 5. 自定义 SQL 结合 Lambda
对于复杂查询,可配合 `@Select` 注解使用:
```java
@Select("SELECT * FROM user WHERE ${ew.customSqlSegment}")
List<User> selectByWrapper(@Param(Constants.WRAPPER) Wrapper<User> wrapper); [^3]
```
#### 6. 优势说明
- **类型安全**:字段引用通过 `User::getName` 实现,编译时检查字段有效性
- **可读性强**:链式调用比字符串更直观
- **维护方便**:字段名修改时 IDE 自动提示更新
阅读全文
相关推荐


















