mybatis 里面的 apply方法 是用于拼接自定义的条件判断,
LambdaQueryWrapper<OtcAppTransaction> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(OtcAppTransaction::getStatus,status);
queryWrapper.apply("takerUserId="+userId +" or makerUserId="+userId);
这段sql生成后查出来的数据跟我想要的数据是有偏差的,我想要的数据其实是满足 status字段为我传的值 并且 只要takerUserId 或者 makerUserId 等于我传的userId。
后来通过我观察生成出来的sql日志 发现上面这段代码这段代码对应的sql应该就是下面这段sql
select * from otc_app_transaction where status = #{status} and takerUserId = #{userId} or makerUserId = #{userId}
这样一来发现了问题所在下面这个sql
takerUserId = #{userId} or makerUserId = #{userId}
这两个是要作为一个条件 两者只要满足一个就行。所以需要加上括号!改完后的代码应该是如下代码:
LambdaQueryWrapper<OtcAppTransaction> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(OtcAppTransaction::getStatus,status);
queryWrapper.apply("(takerUserId="+userId +" or makerUserId="+userId+")");
这样最后查出来的数据就是我需要的数据了!
总结:
最终总结就是使用apply方法的时候,如果自定义的条件判断是需要独立的结果 就必须记得加括号!