1.wrapper.last语句拼接未生效
未生效代码
QueryWrapper<User> billQueryWrapper = Wrappers.<User>query();
billQueryWrapper.lambda()
.eq(User::getFeeCode, "feeId")
.last("LIMIT 1");
List<User> resultList = mapper.selectList(billQueryWrapper);
原因:billQueryWrapper并未赋值 last属性值
修复代码
QueryWrapper<User> billQueryWrapper = Wrappers.<User>query();
LambdaQueryWrapper<User> lambdaQueryWrapper1 = billQueryWrapper.lambda()
.eq(User::getFeeCode, "feeId")
.last("LIMIT 1");
List<User> resultList = mapper.selectList(lambdaQueryWrapper1);
未生效原因分析:
queryWrapper.lambda()
会创建一个新的 LambdaQueryWrapper
实例,但该实例与原始 QueryWrapper
共享底层条件表达式(expression
)。这意味着:
1.eq
、like
等条件方法会直接修改共享的 expression
,因此对原始 QueryWrapper
生效。
2.last
、exists
等 SQL 拼接方法作用在 LambdaQueryWrapper
自身的 SqlSegment
上,而非原始 QueryWrapper
,导致条件未生效。
源码:
2.wrapper.in 无效导致查全表
LambdaQueryWrapper<User> lambdaQueryWrapper1 = billQueryWrapper.lambda()
.in(User::getId, Arrays.asList());
List<User> resultList = mapper.selectList(lambdaQueryWrapper1);
in查询时,当list集合为空会进行全表扫描。 拼接后的语句为 select * from User