什么时候用queryWrapper,什么时候用LambdaqueryWrapper
时间: 2024-05-17 16:14:39 浏览: 64
QueryWrapper和LambdaQueryWrapper都是MyBatis-Plus(一款优秀的 MyBatis 增强工具)中提供的查询构造器,用于构建复杂的SQL查询条件。
QueryWrapper使用字符串作为参数,LambdaQueryWrapper使用Lambda表达式作为参数。Lambda表达式可以更加直观地表示查询条件,而且可以在编译期进行类型检查,避免了字符串拼接时出现的拼写错误等问题。
一般来说,LambdaQueryWrapper的性能比QueryWrapper更好,因为Lambda表达式可以在编译期进行优化。但是,在一些特殊情况下,QueryWrapper可能会更加方便,比如在动态拼接SQL语句时。
因此,当查询条件比较简单并且不需要动态拼接SQL语句时,建议使用LambdaQueryWrapper;当查询条件比较复杂或需要动态拼接SQL语句时,建议使用QueryWrapper。
相关问题
为什么使用LambdaQueryWrapper而不是QueryWrapper
LambdaQueryWrapper 和 QueryWrapper 都是 MyBatis-Plus 框架中用于构造 SQL 查询语句的工具类,但它们的使用方式略有不同。
QueryWrapper 使用链式调用的方式构造查询条件,需要手动编写字符串形式的字段名,容易出现拼写错误,而且对于复杂的查询条件,代码可读性不高。
LambdaQueryWrapper 利用了 Java 8 的 Lambda 表达式,可以通过引用实体类的属性名来构造查询条件,避免了手写字符串形式的字段名,提高了代码可读性,也减少了出错的可能性。
因此,如果你使用的是 Java 8 及以上的版本,建议使用 LambdaQueryWrapper 来构造查询条件。
QueryWrapper 与 LambdaQueryWrapper 有什么区别?
QueryWrapper 和 LambdaQueryWrapper 都是 MyBatis-Plus 提供的实现了 Wrapper 接口的查询构造器,它们可以用于构建复杂的 SQL 查询语句。它们之间最大的区别在于构造条件的方式不同。
QueryWrapper 使用的是链式调用的方式构建查询条件,它的语法类似于 MyBatis 的 XML 配置文件中的标签。例如,以下代码是使用 QueryWrapper 构建查询条件的示例:
```
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三").ge("age", 18).orderByDesc("age");
List<User> userList = userMapper.selectList(queryWrapper);
```
而 LambdaQueryWrapper 使用的是 Lambda 表达式的方式构建查询条件,它的语法更加简洁直观,也更加符合 Java 语言的特点。例如,以下代码是使用 LambdaQueryWrapper 构建查询条件的示例:
```
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "张三").ge(User::getAge, 18).orderByDesc(User::getAge);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
```
综上所述,LambdaQueryWrapper 更加简洁、直观,并且可以避免手写 SQL 语句时出现的一些常见错误。但是需要注意的是,LambdaQueryWrapper 的性能可能会略低于 QueryWrapper,因为 Lambda 表达式需要通过反射来解析成 SQL 语句。因此,在对性能要求较高的场景下,建议使用 QueryWrapper。
阅读全文