mybatis-plus查询问题总结

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.eqlike 等条件方法会直接修改共享的 expression,因此对原始 QueryWrapper 生效。

2.lastexists 等 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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值