mybatis用QueryWrapper实现or查询

本文介绍使用QueryWrapper创建SQL查询时遇到的问题及解决方案,包括如何正确指定实体类和构建复杂的查询条件,避免SQL语法错误。

我希望实现的sql:WHERE a.del_flag = ? AND ( a.customer_referee = ?  OR referee.referee_id = ?)

坑1:创建QueryWrapper对象的时候没有指定entity类,导致下面代码编译报错:

QueryWrapper wrapper3 = new QueryWrapper();
wrapper3.eq("a.customer_referee",UserUtils.getCurrentUserDTO().getId())
      .or().eq("referee.referee_id",UserUtils.getCurrentUserDTO().getId());

解决办法:

QueryWrapper<MyEntity> wrapper3 = new QueryWrapper<>();
wrapper3.eq("a.customer_referee",UserUtils.getCurrentUserDTO().getId())
      .or().eq("referee.referee_id",UserUtils.getCurrentUserDTO().getId());

坑2:生成的sql脚本or条件不带括号,并且多出一个and,导致执行脚本报错:

queryWrapper.eq ("a.del_flag", 0 );
queryWrapper.and(Wrapper->{
   queryWrapper.eq("a.customer_referee", UserUtils.getCurrentUserDTO().getId())
   .or()
   .eq("referee.referee_id", UserUtils.getCurrentUserDTO().getId());
});
   生成的sql脚本为: 
WHERE (a.del_flag = ? AND a.customer_referee = ?  OR referee.referee_id = ? AND )

解决办法:

QueryWrapper<MyEntity> queryWrapper= new QueryWrapper<>();
queryWrapper.eq ("a.del_flag", 0 );
queryWrapper.and((wrapper)->{
   wrapper.eq("a.customer_referee", UserUtils.getCurrentUserDTO().getId())
   .or()
   .eq("referee.referee_id", UserUtils.getCurrentUserDTO().getId());
});
   生成的sql脚本为: 
WHERE (a.del_flag = ? AND (a.customer_referee = ?  OR referee.referee_id = ?))
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值