SpringBoot+Mybatis使用Enum枚举类型总是报错No enum constant XX问题

 更新时间:2023年12月27日 08:49:30   作者:Damionew  
这篇文章主要介绍了SpringBoot+Mybatis使用Enum枚举类型总是报错No enum constant XX问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringBoot+Mybatis使用Enum枚举类型总是报错No enum constant XX

环境SpringBoot+Mybatis

比如:

数据库中User表存放status字段值为1,想要通过Mybatis转换后为正在使用

当然,可以使用if else 但是状态值很多时,就变得很复杂,且不利于维护,故需要用到枚举类

数据库查询时获得status值为1,通过Mybatis依照枚举类进行转换获取到对应的状态

之前使用时总是报错

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默认的转换器EnumTypeHandler 进行转换,

解决方法

只需要修改mybatis文件,添加ResultMap配置,对需要枚举转换的字段配置特定的转换类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>

注意!:

1:查询中resultType修改为ResultMap,否则会报 can not find class XXX

2:此处Result属性中,column对应的是数据库中字段,property是实体类中属性,项目中使用了数据库中_+小写转换为大写驼峰写法的配置

总结

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

相关文章

  • 使用Java实现百万Excel数据导出

    使用Java实现百万Excel数据导出

    这篇文章主要为大家详细介绍了如何使用Java实现百万Excel数据导出,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-03-03
  • java实现interceptor拦截登录权限

    java实现interceptor拦截登录权限

    Java里的拦截器是动态拦截action调用的对象,本文主要介绍了java实现interceptor拦截登录权限,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java org.w3c.dom.Document 类方法引用报错

    Java org.w3c.dom.Document 类方法引用报错

    这篇文章主要介绍了Java org.w3c.dom.Document 类方法引用报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java简单模拟实现一个线程池

    Java简单模拟实现一个线程池

    本文主要介绍了Java简单模拟实现一个线程池,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Kotlin协程与并发深入全面讲解

    Kotlin协程与并发深入全面讲解

    Android官方对协程的定义-协程是一种并发设计模式,您可以在Android平台上使用它来简化异步执行的代码。协程是在版本1.3中添加到Kotlin的,它基于来自其他语言的既定概念
    2022-11-11
  • Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作

    这篇文章主要介绍了Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 详解如何在Spring Boot中实现容错机制

    详解如何在Spring Boot中实现容错机制

    容错机制是构建健壮和可靠的应用程序的重要组成部分,它可以帮助应用程序在面对异常或故障时保持稳定运行,Spring Boot提供了多种机制来实现容错,包括异常处理、断路器、重试和降级等,本文将介绍如何在Spring Boot中实现这些容错机制,需要的朋友可以参考下
    2023-10-10
  • Intellij IDEA连接Navicat数据库的方法

    Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下
    2021-03-03
  • Java获取时间如何将当前时间减一天、一月、一年、并格式化

    Java获取时间如何将当前时间减一天、一月、一年、并格式化

    这篇文章主要介绍了Java获取时间,将当前时间减一天、一月、一年,并加以格式化,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java编程时间日期API实例解析

    Java编程时间日期API实例解析

    本文主要介绍了Java编程时间日期API实例解析的相关内容,分享了一则实例,具有一定借鉴价值,需要的朋友可以参考下。
    2018-01-01

最新评论