[Mybatis Plus]lambdaQueryWrapper和QueryWrapper的选择

结论

更推荐使用:LambdaQueryWrapper


QueryWrapper:灵活但是不够类型安全

LambdaQueryWrapper:安全

分析

在MyBatis-Plus中,QueryWrapperLambdaQueryWrapper 都是用来构建查询条件的工具类。它们都提供了链式调用的方式来构造SQL语句中的WHERE条件部分,但是两者之间存在一些差异。

QueryWrapper

QueryWrapper 是一个基础的查询条件构造器,它允许直接使用字段名来构建查询条件。这种方式的优点是直观,容易理解;缺点是在字段名发生变更时,需要手动修改所有相关的地方,容易出现错误。

示例代码:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
List<User> users = userMapper.selectList(queryWrapper);

LambdaQueryWrapper

LambdaQueryWrapper 则是基于Lambda表达式的查询条件构造器,它通过方法引用来指定字段,这样可以利用Java编译器的类型检查功能,避免因为字段名更改而导致的错误。同时,这种方式也更符合Java8之后推崇的函数式编程风格。

示例代码:

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "张三");
List<User> users = userMapper.selectList(lambdaQueryWrapper);

主要区别

  1. 类型安全

    • LambdaQueryWrapper 使用方法引用,因此可以在编译时检查字段是否存在,提供更好的类型安全性。
    • QueryWrapper 使用字符串形式的字段名,如果字段名发生变化,编译时不会报错,只能运行时发现问题。
  2. 易用性

    • 对于大型项目或者团队开发来说,LambdaQueryWrapper 更加推荐,因为它可以减少因字段名变化而引起的错误。
    • QueryWrapper 虽然简单直接,但在维护大型应用时可能会带来额外的工作量。
  3. 性能

    • 在性能方面,两者几乎没有差异,因为最终都会转换为相同的SQL语句执行。

总的来说,如果你的应用或项目中实体类的属性较多,或者团队成员较多,建议使用 LambdaQueryWrapper,以提高代码的健壮性和可维护性。对于小型项目或是个人项目,使用 QueryWrapper 也可以满足需求,并且编写起来可能更加直观快捷。

答疑

暂时没有什么疑惑

posted @ 2024-10-19 10:40  萌狼蓝天  阅读(6)  评论(0编辑  收藏  举报