mybatis + lombok 出现 java.lang.IndexOutOfBoundsException

10 篇文章 2 订阅
3 篇文章 0 订阅

**

问题描述:

**
报错图
就是一个简单的select语句,拿出来单独运行也是OK的。
select s.sid,s.title,s.url,s.icon,s.cate_id from sites s

跟进错误栈调试发现,报错是因为mybatis要把select出来的字段包装成Java对象时,找不到其构造函数中对应的字段。

构造函数为啥这5个字段呢。就是因为用了lombok的@Builder方法,这个注解生成了全参的构造函数,但没有这5个参数的构造器。

越界点
这里for循环constructor.getParameterTypes().length就是全参构造器的参数数量,我这里是11个。rsw.getColumnNames().get(i)越界报错。
解释一下,rsw是mybatis运行sql得到的列,我这里有5个。所以当i循环超过5时,get(i)会越界。

**

解决方案:

**
知道原因就知道如何解决了。这里我们需要有无参构造函数。
于是在@Builder上面加@NoArgsConstructor就行了,但是编译不过。
因为@Builder自带的全参构造器是会被覆盖的,所以这时候再加@AllArgsConstructor才可以。

最终结果:
结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值