mybatis + lombok 出现 java.lang.IndexOutOfBoundsException

**

问题描述:

**
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个参数的构造器。

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

**

解决方案:

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

最终结果:
mybatis + lombok 出现 java.lang.IndexOutOfBoundsException