在项目中使用MyBatisPlus中的or()查询时由于误用,导致查询数据不对,仅作记录。
写法一:
LambdaQueryWrapperqueryWrapper = new QueryWrapper ().lambda(); queryWrapper .eq(Task::getUserId, "15") .eq(Task::getStatus, 2) .or() .eq(Task::getFileSize, 3251544304L);
上面这种写法等价于下面的sql
SELECt * FROM task WHERe user_id = ? AND status = ? OR file_size = ?
写法二:
LambdaQueryWrapperqueryWrapper2 = new QueryWrapper ().lambda(); queryWrapper2 .eq(Task::getUserId, "15") .and(wrapper -> wrapper.eq(Task::getStatus, 2).or().eq(Task::getFileSize, 3251544304L));
上面这种写法对应的sql如下
SELECt * FROM task WHERe user_id = ? AND ( status = ? OR file_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} and b in #{item} and name like '%${c}%' or code like '%${c}%' order by id desc limit #{limit} offset #{page}
这样写的错误是如果a==null那么第二个条件中就会多一个and,语句会变成select * from *** where and b in (...),而如果条件全都不满足的话SQL会变成select * from *** where order by id desc limit...解决办法:加上
select * from *** order by id desc limit #{limit} offset #{page} a = #{a} and b in #{item} and name like '%${c}%' or code like '%${c}%'
如上代码所示,加上一个
select * from *** order by id desc limit #{limit} offset #{page} a = #{a} and b in #{item} and (name like '%${c}%' or code like '%${c}%')
总结
到此这篇关于MyBatisPlus中使用or()和and()遇到的问题的文章就介绍到这了,更多相关MyBatisPlus中使用or()和and()内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!



