使用Mybatis-Plus的queryWapper构建查询条件报下标越界

 queryWrapper.between(!CollectionUtils.isEmpty(birthday), PeopleEntity::getBirthday,birthday.get(0),birthday.get(1));中!CollectionUtils.isEmpty(birthday)

使用between函数构造查询条件,在查询之前虽然添加了查询条件,但是当集合为空的时候仍然报错List集合下标越界
下面是List通过下标访问的get方法

    private void rangeCheck(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }

当点进去打断点发现其size为0,所以访问失败。
在这个错误出现的原因为birthday集合在接收前端传入参数时是[ ],不为null,所以会报数组下标越界。
但是在上述条件添加的情况下仍然出现这个问题,经过查询可以大致确定问题所在点如下

在 Java 中,方法的参数是在调用方法之前进行计算和求值的。
即使 !CollectionUtils.isEmpty(birthday) 的结果为 false,也不会影响实际传递给方法的参数

所以对于此类问题,在构造查询条件的时候使用条件参数需要注意
解决此问题的方法是将条件放到外面重新构造如下:

if(!CollectionUtils.isEmpty(birthday)){
	queryWrapper.between( PeopleEntity::getBirthday,birthday.get(0),birthday.get(1));
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值