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

 更新时间:2025年02月18日 09:08:47   作者:一颗小小的石头.  
在使用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)会越界。

解决方案

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

最终结果:

结果

总结

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

相关文章

  • SpringBoot实现多数据源的切换实践

    SpringBoot实现多数据源的切换实践

    这篇主要介绍了SpringBoot实现多数据源的切换,本文基于AOP来实现数据源的切换,文中通过示例代码介绍的非常详细,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 详解Spring中singleton bean如何同时服务多个请求

    详解Spring中singleton bean如何同时服务多个请求

    这篇文章主要介绍了详解Spring中singleton bean如何同时服务多个请求
    2023-02-02
  • 关于eclipse安装spring插件报错An error occurred while collecting items to be installed...解决方案

    关于eclipse安装spring插件报错An error occurred while collecting item

    这篇文章主要介绍了关于eclipse安装spring插件报错An error occurred while collecting items to be installed...解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • java 服务器接口快速开发之servlet详细教程

    java 服务器接口快速开发之servlet详细教程

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容
    2021-06-06
  • Spring Security使用单点登录的权限功能

    Spring Security使用单点登录的权限功能

    本文主要介绍了Spring Security使用单点登录的权限功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 使用Spring Expression Language (SpEL)全面解析表达式

    使用Spring Expression Language (SpEL)全面解析表达式

    这篇文章主要介绍了使用Spring Expression Language (SpEL)全面解析表达式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java后端中dto、vo、entity的区别浅析

    Java后端中dto、vo、entity的区别浅析

    这篇文章主要给大家介绍了关于Java后端中dto、vo、entity区别的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-01-01
  • SpringBoot使用jsr303校验的实现

    SpringBoot使用jsr303校验的实现

    这篇文章主要介绍了SpringBoot使用jsr303校验的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java Big Number操作BigInteger及BigDecimal类详解

    Java Big Number操作BigInteger及BigDecimal类详解

    这篇文章主要为大家介绍了Java Big Number操作BigInteger及BigDecimal类详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java利用泛型实现折半查找法

    Java利用泛型实现折半查找法

    泛型是JAVA重要的特性,使用泛型编程,可以使代码复用率提高。查找作为泛型的一个简单应用,本文将使用泛型实现折半查找法,感兴趣的可以了解一下
    2022-08-08

最新评论