LambdaQueryWrapper 和 QueryWrapper区别及案例

简介: LambdaQueryWrapper 和 QueryWrapper区别及案例

LambdaQueryWrapper 和 QueryWrapper 是 MyBatis-Plus(简称 MP)框架中用于构建查询条件的两种常用 Wrapper。它们的主要区别如下:

1. 写法和表达方式不同:

  •  QueryWrapper:使用传统的字符串形式构建查询条件,通过支持链式调用的方式,可以方便地拼接多个查询条件。
  •   LambdaQueryWrapper:使用 Lambda 表达式构建查询条件,可以通过实体类的属性和方法来安全地编写查询条件,减少犯错和代码冗余。

2. 类型安全和编译时检查:

  •    QueryWrapper:由于是字符串形式的条件拼接,编译时无法检查其中的错误和类型不匹配问题,所以需要开发人员自行保证查询条件的正确性。
  •    LambdaQueryWrapper:基于 Lambda 表达式构建查询条件,可以在编译阶段进行类型检查,编译器可以帮助检测属性名等错误,减少运行时出错的可能性。

3. 支持实体属性的引用方式:

  •    QueryWrapper:需要手动通过字符串形式指定实体类的属性名。
  •    LambdaQueryWrapper:可以直接使用实体类的属性名,减少手写字符串的风险和不便。

  4.举例:

 假设有一个 User 实体类,包含 id、name、age 和 gender 等属性。

1.使用 QueryWrapper:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 18).eq("gender", "女性");
List<User> userList = userMapper.selectList(queryWrapper);
2.使用 LambdaQueryWrapper:
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ge(User::getAge, 18).eq(User::getGender, "女性");
List<User> userList = userMapper.selectList(lambdaQueryWrapper);

总结:

  需要注意的是,在某些特殊情况下,特别是涉及到复杂的查询逻辑、关联表查询等高级查询需求时,QueryWrapper 的灵活性会更加适用。而在普通的单表查询中,LambdaQueryWrapper 的简洁性和类型安全性更加优势。

  在实际使用中,可以根据具体的需求和个人偏好选择适合的 Wrapper 类型,或者根据实际情况结合使用它们来满足不同的查询需求。

相关文章
|
8月前
|
Java 数据库连接 数据库
Mybatis-plus中的QueryWrapper的多种用法!(总结)
Mybatis-plus中的QueryWrapper的多种用法!(总结)
989 0
|
8月前
|
设计模式 前端开发 Java
DTO和VO的区别及使用场景详解
DTO和VO的区别及使用场景详解
4798 0
|
Java 数据库连接 数据库
|
7月前
|
SQL IDE Java
通过一次性能优化,再次记牢了mybatisplus的QueryWrapper、LambdaQueryWrapper、AbstractWrapper这三者之间的关系...
本文描述了一次针对SpringBoot应用中MyBatisPlus分页查询的性能优化过程。在优化时,作者重写了BaseMapper的`selectPage`方法,通过`Wrapper`的`between`操作添加了ID区间限制以提升SQL执行效率。然而,由于在业务服务类中循环调用分页查询时未每次都创建新的`Wrapper`对象,导致`id BETWEEN ? AND ?`条件重复出现在SQL中。那么,如何解决这个问题呢?
585 5
|
8月前
|
JSON Java 数据格式
Java QueryWrapper基本用法
Java QueryWrapper基本用法
123 2
|
Java 数据库
详述 PO VO BO DTO DAO 和 POJO 的概念及区别
详述 PO VO BO DTO DAO 和 POJO 的概念及区别
228 0
|
设计模式 前端开发 Java
5年老鸟带你区分 VO、PO、DTO、BO、POJO、JavaBean、Entity(有图,记得收藏)
5年老鸟带你区分 VO、PO、DTO、BO、POJO、JavaBean、Entity(有图,记得收藏)
1645 0
5年老鸟带你区分 VO、PO、DTO、BO、POJO、JavaBean、Entity(有图,记得收藏)
|
XML SQL Java
mybatis开发要点-insert主键ID获取和多参数传递
mybatis开发要点-insert主键ID获取和多参数传递
210 0
|
SQL Java 数据库连接
MyBatis快速入门——第二章、参数传递demo(id查询&模糊查询)
MyBatis快速入门——第二章、参数传递demo(id查询&模糊查询)
123 0
MyBatis快速入门——第二章、参数传递demo(id查询&模糊查询)
用无限套娃的extends做一个teacher and student案例
用无限套娃的extends做一个teacher and student案例
93 0
用无限套娃的extends做一个teacher and student案例