MyBatisPlus中使用or()和and()遇到的问题及细节处理
在项目中使用MyBatisPlus中的or()查询时由于误用,导致查询数据不对,仅作记录。
写法一:
LambdaQueryWrapperqueryWrapper=newQueryWrapper ().lambda(); queryWrapper .eq(Task::getUserId,"15") .eq(Task::getStatus,2) .or() .eq(Task::getFileSize,3251544304L);
上面这种写法等价于下面的sql
SELECT*FROMtaskWHEREuser_id=?ANDstatus=?ORfile_size=?
写法二:
LambdaQueryWrapperqueryWrapper2=newQueryWrapper ().lambda(); queryWrapper2 .eq(Task::getUserId,"15") .and(wrapper->wrapper.eq(Task::getStatus,2).or().eq(Task::getFileSize,3251544304L));
上面这种写法对应的sql如下
SELECT*FROMtaskWHEREuser_id=?AND(status=?ORfile_size=?)
SpringBoot集成MyBatisPlus配置文件添加以下配置即可在控制台查看sql
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
PS:下面看下Mybatis中and和or的细节处理
当一条SQL中既有条件查又有模糊查的时候,偶尔会遇到这样的and拼接问题。参考如下代码:
select*from*** where a=#{a} andbin #{item} andnamelike'%${c}%'orcodelike'%${c}%' orderbyiddesc limit#{limit}offset#{page}
这样写的错误是如果a==null那么第二个条件中就会多一个and,语句会变成select*from***whereandbin(...),而如果条件全都不满足的话SQL会变成select*from***whereorderbyiddesclimit...解决办法:加上
select*from*** orderbyiddesc limit#{limit}offset#{page} a=#{a} andbin #{item} andnamelike'%${c}%'orcodelike'%${c}%'
如上代码所示,加上一个
select*from*** orderbyiddesc limit#{limit}offset#{page} a=#{a} andbin #{item} and(namelike'%${c}%'orcodelike'%${c}%')
总结
到此这篇关于MyBatisPlus中使用or()和and()遇到的问题的文章就介绍到这了,更多相关MyBatisPlus中使用or()和and()内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。