mybatis用QueryWrapper实现or查询
我希望实现的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 = ?))
下一篇:
MYSQL按时间查询(年/月/日)