SpringBoot+Mybatis使用Enum枚舉類型總是報錯No enum constant XX問題
SpringBoot+Mybatis使用Enum枚舉類型總是報錯No enum constant XX
環(huán)境SpringBoot+Mybatis
比如:
數(shù)據(jù)庫中User表存放status字段值為1,想要通過Mybatis轉(zhuǎn)換后為正在使用
當然,可以使用if else 但是狀態(tài)值很多時,就變得很復雜,且不利于維護,故需要用到枚舉類
數(shù)據(jù)庫查詢時獲得status值為1,通過Mybatis依照枚舉類進行轉(zhuǎn)換獲取到對應的狀態(tài)
之前使用時總是報錯
Wed Jan 02 10:59:18 CST 2019
There was an unexpected error (type=Internal Server Error, status=500).
nested exception is org.apache.ibatis.executor.result.ResultMapException:
Error attempting to get column 'qu_type' from result set.
Cause: java.lang.IllegalArgumentException: No enum constant com.test.model.survey.QuType.1
此時的實體類代碼如下:
public class Question { private String id; // 類型 private QuType quType; 。。get set }
枚舉類代碼:
public enum QuType { YESNO("是否","yesno", 0); private String quName; private String quEnName; private int index; QuType(String quName,String quEnName,int index){ this.cnName=quName; this.quEnName=quEnName; this.index=index; } ..get set }
Mybatis文件如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.test.mapper.QuestionMapper"> <select id="getQuestionById" resultType="Question"> SELECT * FROM question WHERE id = #{Id} </select> </mapper>
此時就會報錯:
No enum constant com.test.model.survey.QuType.1
原因是無法使用Mybatis默認的轉(zhuǎn)換器EnumTypeHandler 進行轉(zhuǎn)換,
解決方法
只需要修改mybatis文件,添加ResultMap配置,對需要枚舉轉(zhuǎn)換的字段配置特定的轉(zhuǎn)換類EnumOrdinalTypeHandler
如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.test.mapper.QuestionMapper"> <resultMap id="questionMap" type="com.test.model.survey.Question" > <id column="id" property="id"/> <result column="qu_type" property="quType" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/> </resultMap> <select id="getQuestionById" resultMap="questionMap"> SELECT * FROM question WHERE id = #{Id} </select> </mapper>
注意?。?/p>
1:查詢中resultType修改為ResultMap,否則會報 can not find class XXX
2:此處Result屬性中,column對應的是數(shù)據(jù)庫中字段,property是實體類中屬性,項目中使用了數(shù)據(jù)庫中_+小寫轉(zhuǎn)換為大寫駝峰寫法的配置
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Java實現(xiàn)百萬Excel數(shù)據(jù)導出
這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)百萬Excel數(shù)據(jù)導出,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下2024-03-03Java org.w3c.dom.Document 類方法引用報錯
這篇文章主要介紹了Java org.w3c.dom.Document 類方法引用報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Java反射 JavaBean對象自動生成插入,更新,刪除,查詢sql語句操作
這篇文章主要介紹了Java反射 JavaBean對象自動生成插入,更新,刪除,查詢sql語句操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Intellij IDEA連接Navicat數(shù)據(jù)庫的方法
這篇文章主要介紹了Intellij IDEA連接Navicat數(shù)據(jù)庫的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借價值,需要的朋友可以參考下2021-03-03