mybatis+lombok出現(xiàn)java.lang.IndexOutOfBoundsException錯(cuò)誤及解決
mybatis+lombok出現(xiàn)java.lang.IndexOutOfBoundsException
問(wèn)題描述

就是一個(gè)簡(jiǎn)單的select語(yǔ)句,拿出來(lái)單獨(dú)運(yùn)行也是OK的。
select s.sid,s.title,s.url,s.icon,s.cate_id from sites s
跟進(jìn)錯(cuò)誤棧調(diào)試發(fā)現(xiàn),報(bào)錯(cuò)是因?yàn)閙ybatis要把select出來(lái)的字段包裝成Java對(duì)象時(shí),找不到其構(gòu)造函數(shù)中對(duì)應(yīng)的字段。
構(gòu)造函數(shù)為啥這5個(gè)字段呢。就是因?yàn)橛昧薼ombok的@Builder方法,這個(gè)注解生成了全參的構(gòu)造函數(shù),但沒(méi)有這5個(gè)參數(shù)的構(gòu)造器。

這里for循環(huán)constructor.getParameterTypes().length就是全參構(gòu)造器的參數(shù)數(shù)量,我這里是11個(gè)。rsw.getColumnNames().get(i)越界報(bào)錯(cuò)。
解釋一下:
rsw是mybatis運(yùn)行sql得到的列,我這里有5個(gè)。所以當(dāng)i循環(huán)超過(guò)5時(shí),get(i)會(huì)越界。
解決方案
- 知道原因就知道如何解決了。這里我們需要有無(wú)參構(gòu)造函數(shù)。
- 于是在@Builder上面加@NoArgsConstructor就行了,但是編譯不過(guò)。
- 因?yàn)锧Builder自帶的全參構(gòu)造器是會(huì)被覆蓋的,所以這時(shí)候再加@AllArgsConstructor才可以。
最終結(jié)果:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中實(shí)現(xiàn)定時(shí)任務(wù)的兩種方法舉例詳解
這篇文章主要給大家介紹了關(guān)于Java中實(shí)現(xiàn)定時(shí)任務(wù)的兩種方法,文中總結(jié)了各種實(shí)現(xiàn)方式的優(yōu)缺點(diǎn),并給出了推薦的使用場(chǎng)景,通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
JAVA利用HttpClient進(jìn)行HTTPS接口調(diào)用的方法
本篇文章主要介紹了JAVA利用HttpClient進(jìn)行HTTPS接口調(diào)用的方法,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
使用Maven將springboot工程打包成docker鏡像
這篇文章主要介紹了使用Maven將springboot工程打包成docker鏡像,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
JDBC連接Mysql的5種方式實(shí)例總結(jié)
JDBC是Java DataBase Connectivity技術(shù)的簡(jiǎn)稱,是一種可用于執(zhí)行 SQL語(yǔ)句的Java API,下面這篇文章主要給大家介紹了關(guān)于JDBC連接Mysql的5種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
java學(xué)習(xí)筆記之eclipse+tomcat 配置
俗話說(shuō):工欲善其事必先利其器,既然要學(xué)習(xí)java,首先把java的開(kāi)發(fā)環(huán)境搗鼓一下吧,這里我們來(lái)談?wù)別clipse+tomcat的配置方法。2014-11-11
如何使用Jenkins編譯并打包SpringCloud微服務(wù)目錄
這篇文章主要介紹了如何使用Jenkins編譯并打包SpringCloud微服務(wù)目錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

