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 = ?))
经验分享 程序员 微信小程序 职场和发展