java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis+lombok出现java.lang.IndexOutOfBoundsException

mybatis+lombok出现java.lang.IndexOutOfBoundsException错误及解决

作者:一颗小小的石头.

在使用MyBatis和Lombok时,如果遇到java.lang.IndexOutOfBoundsException问题,是因为MyBatis在尝试将查询结果封装成Java对象时,找不到构造函数中对应的字段,这通常是由于Lombok的@Builder注解生成了全参构造函数

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)会越界。

解决方案

最终结果:

结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文