QueryWrapper 和 LambdaQueryWrapper 的区别

1. QueryWrapper

  1. QueryWrapper是一种通用的查询构造器,允许通过字符串形式直接指定数据库的字段名来构建查询条件。例如,queryWrapper.eq(“name”,
    “Alice”) 用于构建等于条件。

  2. 优点是使用简单直接,适用于所有情况。缺点是它依赖于字符串字面量,这可能导致在数据库字段名更改时出现运行时错误,因为这些错误不会在编译时被捕捉到。

2. LambdaQueryWrapper

LambdaQueryWrapper 使用Java的Lambda表达式,它是通过方法引用的方式来指明查询的对象,如:lambdaQueryWrapper.eq(User::getName, “Alice”) ,这样就保证了类型安全。

3. 举例子

如果我们想要查找名字为 “Alice” 并且年龄等于 30 的用户,使用 QueryWrapper 的代码如下:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Alice");
queryWrapper.eq("age", 30);

List<User> users = userService.list(queryWrapper);

通过传递字段名的字符串来构建查询条件。这种方式简单直接,但缺点是字段名是硬编码的字符串,如果数据库中的字段名发生变化,这段代码在编译时不会报错,但运行时将导致错误。

同样的查询,如果使用 LambdaQueryWrapper,则代码如下:

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "Alice");
lambdaQueryWrapper.eq(User::getAge, 30);

List<User> users = userService.list(lambdaQueryWrapper);

这里使用了 Java 的 Lambda 表达式,直接引用实体类的 getter 方法(如 User::getName)。这种方式的优点是类型安全,即字段名是通过编译时检查的,如果 User 类中没有 getName 或 getAge 方法,代码将无法编译通过。这样一来,即使字段名在数据库中发生更改,只要相应地更新实体类中的方法名,整个应用的相关引用都会自动更新,从而避免了运行时错误。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值