mybatis + lombok 出现 java.lang.IndexOutOfBoundsException
**
问题描述:
**
就是一个简单的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才可以。
最终结果: