QueryWrapper的lambda表达式使用OR

文章介绍了在MybatisPlus框架中,如何利用QueryWrapper和lambda表达式来构建查询条件,特别是如何实现OR连接。示例代码展示了如何对名字列表进行OR条件匹配,先设置第一个名字,然后遍历列表剩余部分添加OR条件。

com.baomidou.mybatisplus.core.conditions.query.QueryWrapper是MybatisPlus框架构造查询条件常用的对象

使用lambda表达式写法更为清晰,简洁:

  QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  queryWrapper.lambda().eq(User::getName,"aa");
  queryWrapper.lambda().ge(User::getAge,20);

默认情况下多个条件是and连接:上述写法对应的SQL为:where name like '%aa%' and age >= 20

如果要使用or连接的话,方法如下:

queryWrapper.lambda().and(wq->{
    wq.like(User::getName,"aa");
    wq.or().like(User::getName,"bb);
});

这里引申下我遇到的一个场景:需要or连接的是一个集合内的所有元素:

List<String> nameList = Lists.newArrayList("aa","bb","cc");
String firstName = nameList.get(0);
nameList.remove(0);
queryWrapper.lambda().and(wq->{
    wq.like(User::getName,firstName);
    for(String name : nameList){
        wq.or().like(User::getName,name);
    }
});
<think>好的,我现在需要帮助用户解决关于MyBatis Plus中QueryWrapperlambda方法的使用或问题。首先,我得回想一下MyBatis Plus的相关知识,特别是QueryWrapperLambdaQueryWrapper的用法。 用户提到的是QueryWrapper.lambda方法,所以应该是指通过QueryWrapper对象调用lambda()来构建条件查询。不过,我记得在MyBatis Plus中,更常见的是直接使用LambdaQueryWrapper类,或者通过QueryWrapperlambda()方法获取LambdaQueryWrapper。这点可能需要确认一下文档。 首先,我应该解释LambdaQueryWrapper的作用,它主要用于类型安全地引用实体属性,避免硬编码字段名。例如,使用User::getName而不是字符串"name",这样在重构时字段名变化会自动更新,减少错误。 接下来,可能需要给出一个基本的使用示例。比如,查询年龄大于18岁的用户,代码大概是这样的: LambdaQueryWrapper<User> lqw = new QueryWrapper<User>().lambda(); lqw.ge(User::getAge, 18); List<User> users = userMapper.selectList(lqw); 或者更简洁的方式: LambdaQueryWrapper<User> lqw = Wrappers.lambdaQuery(); lqw.ge(User::getAge, 18).eq(User::getStatus, 1); 这里需要注意是否正确使用了静态工厂方法Wrappers.lambdaQuery(),这可能是更推荐的写法。 然后,用户可能会遇到常见问题,比如混淆字段名与数据库列名的情况。例如,如果实体类使用了@TableField注解指定数据库列名,Lambda表达式引用的仍然是实体属性名,而不是数据库列名,这可能导致错误。需要提醒用户确保数据库映射正确。 另一个常见问题是链式调用的顺序问题。例如,多个条件之间的逻辑关系是否正确使用and()或or()连接,否则可能导致查询条件不符合预期。例如: lqw.ge(User::getAge, 18).or().eq(User::getStatus, 0); 这样的条件会被解析为age >=18 OR status=0,而如果用户本意是AND关系,就需要调整。 另外,关于性能方面,LambdaQueryWrapper在运行时可能会通过反射获取属性名,虽然MyBatis Plus可能有缓存机制,但相比普通的QueryWrapper,可能会有轻微的性能开销,但通常可以忽略不计。需要指出这一点,但也要说明可读性和维护性的优势。 可能还需要提到版本兼容性的问题,不同版本的MyBatis Plus中LambdaQueryWrapper的用法是否有变化。例如,旧版本可能需要不同的方式初始化,而新版本推荐使用Wrappers工具类。 最后,生成相关问题的时候,需要考虑用户可能进一步想了解的内容,比如如何解决NPE问题,如何联表查询,或者如何优化lambda查询的性能等。</think>### MyBatis Plus QueryWrapper.lambda 方法使用与常见问题 #### 1. LambdaQuery
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值