当前使用版本(必填,否则不予处理)

    <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

有问题再打开