当前使用版本(必填,否则不予处理)
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.31</version>
</dependency>
该问题是如何引起的?(确定最新版也有问题再提!!!)
使用Wrapper查询时,需要多个OR条件时
重现步骤(如果有就写完整)
1、两个OR时,生成的SQL正常
private boolean valid(Long begin, Long end) {
LambdaQueryWrapper<MyEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MyEntity::getDelFlag, false);
// 两个OR
wrapper.and(aw ->
aw.or().or(ow -> {
ow.le(MyEntity::getBegin, begin).ge(MyEntity::getEnd, begin);
}).or().or(ow -> {
ow.le(MyEntity::getBegin, end).ge(MyEntity::getEnd, end);
})
);
return 0 == assetCodeSegmentService.count(wrapper);
}
// 两个OR条件,被括号括起来
select count(*) as total from my_table where del_flag = false and ((begin <= 90 and end >= 90) or (begin <= 125 and end >= 125))
2、三个OR条件时,生成的SQL就不正确了
private boolean validSegment(Long begin, Long end) {
LambdaQueryWrapper<MyEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MyEntity::getDelFlag, false);
// 三个OR
wrapper.and(aw ->
aw.or().or(ow -> {
ow.le(MyEntity::getBegin, begin).ge(MyEntity::getEnd, begin);
}).or().or(ow -> {
ow.le(MyEntity::getBegin, end).ge(MyEntity::getEnd, end);
})
// 下面再加一个or条件
.or().or(ow -> {
ow.ge(MyEntity::getBegin, begin).le(MyEntity::getEnd, end);
})
);
return 0 == assetCodeSegmentService.count(wrapper);
}
// 生成的SQL少了括号
select count(*) as total from sam_asset_code_segment where del_flag = false and (begin <= 90 and end >= 90) or (begin <= 125 and end >= 125) or (begin >= 90 and end <= 125)
报错信息
SQL拼接错误
Comment From: skywsp
应该是Mybatis框架的问题
Comment From: nieqiurong
有问题再打开