java LambdaQueryWrapper与QueryWrapper
时间: 2023-08-19 08:17:03 浏览: 502
LambdaQueryWrapper和QueryWrapper是MyBatis-Plus框架中用于构建SQL查询条件的两个类。
QueryWrapper是一个普通的查询条件构造器,通过链式调用的方式可以方便地构建各种查询条件。它可以用于传统的方式构建SQL查询条件,比如通过eq、ne、gt、ge、lt、le等方法来设置等值、不等值、大于、大于等于、小于、小于等于等条件。
LambdaQueryWrapper是QueryWrapper的增强版,它引入了Lambda表达式来构建查询条件。通过Lambda表达式,我们可以直接使用实体类的属性名来构建查询条件,而不需要手动编写字符串类型的字段名。LambdaQueryWrapper支持eq、ne、gt、ge、lt、le等方法,用法和QueryWrapper类似,但是它的参数可以是一个Lambda表达式,用来指定查询条件所对应的实体类属性。
总的来说,LambdaQueryWrapper相比QueryWrapper更加便捷和易用,能够在编译期进行属性名检查,减少了手写字符串字段名的错误可能性。但是需要注意的是,LambdaQueryWrapper在性能上可能会稍微逊色于QueryWrapper,因为它需要通过反射来获取属性名。
需要注意的是,这两个类都是MyBatis-Plus提供的工具类,用于简化SQL查询条件的构建和封装。在使用时可以根据具体的需求选择合适的类来构建查询条件。
相关问题
LambdaQueryWrapper与QueryWrapper的应用场景
LambdaQueryWrapper和QueryWrapper是MyBatis-Plus中的两个查询构造器,它们的应用场景如下:
1. LambdaQueryWrapper
LambdaQueryWrapper是基于Lambda表达式的查询构造器,使用Lambda表达式可以更加方便地创建查询条件,避免了手写字符串拼接的繁琐和容易出错的问题。LambdaQueryWrapper的应用场景如下:
(1)根据实体类属性查询数据,如:
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三");
List<User> userList = userMapper.selectList(wrapper);
```
(2)根据多个实体类属性查询数据,如:
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三").eq(User::getAge, 18);
List<User> userList = userMapper.selectList(wrapper);
```
(3)根据条件进行分组、排序等操作,如:
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User::getAge, User::getSex).groupBy(User::getAge).orderByDesc(User::getAge);
List<User> userList = userMapper.selectList(wrapper);
```
2. QueryWrapper
QueryWrapper是传统的查询构造器,可以用于创建各种查询条件,支持链式操作,但是使用时需要手写字符串拼接,相对不太方便。QueryWrapper的应用场景如下:
(1)根据某个字段查询数据,如:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三");
List<User> userList = userMapper.selectList(wrapper);
```
(2)根据多个字段查询数据,如:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三").eq("age", 18);
List<User> userList = userMapper.selectList(wrapper);
```
(3)根据条件进行分组、排序等操作,如:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("age", "sex").groupBy("age").orderByDesc("age");
List<User> userList = userMapper.selectList(wrapper);
```
LambdaQueryWrapper 与 QueryWrapper的差異,如何使用
### LambdaQueryWrapper 与 QueryWrapper 的区别
MyBatis-Plus 提供了两种查询封装器 `LambdaQueryWrapper` 和 `QueryWrapper` 来简化 SQL 查询语句的构建过程。
#### QueryWrapper 特点
`QueryWrapper` 是 MyBatis-Plus 中用于条件构造的基础类。通过该类可以方便地组合各种查询条件,支持链式调用来实现复杂的查询逻辑[^1]。
```java
// 使用 QueryWrapper 构建查询条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 20).like("name", "李");
List<User> users = userMapper.selectList(queryWrapper);
```
#### LambdaQueryWrapper 特点
`LambdaQueryWrapper` 继承自 `AbstractWrapper` 并实现了 lambda 表达式的功能。这使得开发者可以在不写错字段名的情况下完成条件组装,利用 Java 方法参数反射机制自动解析实体属性名称,从而减少硬编码带来的风险并提高代码可读性和维护性。
```java
// 使用 LambdaQueryWrapper 构建查询条件
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 20).like(User::getName, "李");
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
```
#### 主要差异对比
| 对比项 | QueryWrapper | LambdaQueryWrapper |
| --- | --- | --- |
| 字段定义方式 | 手动输入字符串形式的表字段名 | 基于实体类方法引用的方式指定列名 |
| 错误预防能力 | 容易因拼写错误而导致运行时异常 | 编译期即可发现潜在问题,避免手写字段名失误 |
因此,在实际开发过程中推荐优先考虑使用 `LambdaQueryWrapper` 进行条件构造,特别是在面对复杂业务场景下的多条件联合查询时更能体现其优势。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)