mybatis+lombok出現(xiàn)java.lang.IndexOutOfBoundsException錯(cuò)誤及解決
mybatis+lombok出現(xiàn)java.lang.IndexOutOfBoundsException
問題描述
就是一個(gè)簡單的select語句,拿出來單獨(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出來的字段包裝成Java對象時(shí),找不到其構(gòu)造函數(shù)中對應(yīng)的字段。
構(gòu)造函數(shù)為啥這5個(gè)字段呢。就是因?yàn)橛昧薼ombok的@Builder方法,這個(gè)注解生成了全參的構(gòu)造函數(shù),但沒有這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)超過5時(shí),get(i)會(huì)越界。
解決方案
- 知道原因就知道如何解決了。這里我們需要有無參構(gòu)造函數(shù)。
- 于是在@Builder上面加@NoArgsConstructor就行了,但是編譯不過。
- 因?yàn)锧Builder自帶的全參構(gòu)造器是會(huì)被覆蓋的,所以這時(shí)候再加@AllArgsConstructor才可以。
最終結(jié)果:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換實(shí)踐
這篇主要介紹了SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換,本文基于AOP來實(shí)現(xiàn)數(shù)據(jù)源的切換,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下2022-03-03詳解Spring中singleton?bean如何同時(shí)服務(wù)多個(gè)請求
這篇文章主要介紹了詳解Spring中singleton?bean如何同時(shí)服務(wù)多個(gè)請求2023-02-02關(guān)于eclipse安裝spring插件報(bào)錯(cuò)An error occurred while collecting item
這篇文章主要介紹了關(guān)于eclipse安裝spring插件報(bào)錯(cuò)An error occurred while collecting items to be installed...解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08java 服務(wù)器接口快速開發(fā)之servlet詳細(xì)教程
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,主要功能在于交互式地瀏覽和生成數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容2021-06-06Spring Security使用單點(diǎn)登錄的權(quán)限功能
本文主要介紹了Spring Security使用單點(diǎn)登錄的權(quán)限功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04使用Spring Expression Language (SpEL)全面解析表達(dá)式
這篇文章主要介紹了使用Spring Expression Language (SpEL)全面解析表達(dá)式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Java Big Number操作BigInteger及BigDecimal類詳解
這篇文章主要為大家介紹了Java Big Number操作BigInteger及BigDecimal類詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07