需求 需求 : 有时候项目需要插入的数据不能出现时间区间的重合 SQL查询 SELECT * FROM table_1 WHERE active=1 AND (start_time >= {start} AND start_time <= {end} OR (start_time <= {start} AND end_time >= {end} ) OR (end_time >= {start} AND end_time <= {end} )) limit 1 MybatisPlus实现 PS: 可根据mp的语法可以完全推出mybatis的写法,具体可以参考下 :MyBatis Example And与Or例子 LambdaQueryWrapper<HotzoneEntity> wrapper = new QueryWrapper<TAB>() .lambda() .last(" limit 1") .eq(TAB::getStatus, StatusEnum.START.getStatus()); wrapper.and(obj -> obj.ge(TAB::getStartTime, start).le(TAB::getStartTime, end) .or(k -> k.le(TAB::getStartTime, start).ge(TAB::getEndTime, end)) .or(m -> m.ge(TAB::getEndTime, start).le(TAB::getEndTime, end)) );