Mybatis枚举映射异常

摘要:
有两种方法:① 实现官方提供的IEnum接口。接口中的getValue方法对应于数据库值@的属性Getter@AllArgsConstructor@ToStringpublicentSexEnumimplementsIEnum<Integer>{WOMAN,MAN;//标记数据库中存储的值为value privatefinalIntegervalue;privatefinal Stringdesc;}② 使用EnumValue注释标记与数据库值对应的属性。

异常描述

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'xxx' from result set. Cause: java.lang.IllegalArgumentException: No enum constant com.xxx.xxx.enums.XxxEnum.Xxx

原因:没有配置枚举的扫描包 type-enums-package

解决:在配置文件中指定枚举的扫描包

application.yaml:

mybatis-plus:
  type-enums-package: xxx.xxx.xxx.enums

application.properties:

mybatis-plus.type-enums-package=com.cyan.test.demo.enums

完整使用Mybatis映射枚举

1)在配置文件中加入 type-enums-package 指定枚举的扫描包

MyBatis-Plus将为包内(包含子包)所有枚举进行适配,可以使用逗号或分号分隔多个包名(支持统配符 *)

application.yaml:

mybatis-plus:
  type-enums-package: 枚举包

application.properties:

mybatis-plus.type-enums-package=枚举包

2)在枚举类中指定数据库值所对应的属性。有两种方式

① 实现官方提供的 IEnum 接口,接口中的 getValue 方法与数据库值对应的属性。

@Getter
@AllArgsConstructor
@ToString
public enum SexEnum implements IEnum<Integer> {

    WOMAN(0, "女"),

    MAN(1, "男");

    // 标记数据库存的值是value
    private final Integer value;

    private final String desc;

}

② 将属性使用 EnumValue 注解标记数据库值对应的属性。

@Getter
@AllArgsConstructor
@ToString
public enum SexEnum {

    WOMAN(0, "女"),

    MAN(1, "男");

    // 标记数据库存的值是value
    @EnumValue
    private final Integer value;

    private final String desc;

}

3)在类的属性声明上直接将字段类型写为枚举类型,读取时将自动转换数据库值为枚举对象。

@Data
@TableName(value = "personal")
public class Personal  {

    private Integer id;

    private String name;

    private SexEnum sex;

    private Integer age;

}

读取数据库中的两条数据进行测试,可以看到值被成功转换为了枚举。

image

image

免责声明:文章转载自《Mybatis枚举映射异常》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇通过设置代理解决AndroidStudio无法下载gradle问题uniapp 学集 (第二章)nvue、组件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Flask web开发之路七

今天写SQLAlchemy数据库  首先介绍ORM的概念: ORM,Object类,Relationship:关系,Mapping:映射,也就是模型关系映射 flask-sqlalchemy是一套ORM框架 ORM的好处:可以让我们操作数据库跟操作对象一样,非常方便,因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象;把高层的面向对象操作转换成低层的...

php连接数据库(一)

1、php链接数据库: 1、链接数据库  2、判断是否连接成功 3、设置字符集 4、选择数据库 5、准备SQL语句 6、发送SQL语句 7、处理结果集 8、释放资源(关闭数据库)   $result = mysqli_querry($link,$sql) //返回一个对象   mysqli_fetch_assoc($result) 一个一个往下读,返回的时...

MySql笔记 --&amp;gt;1

MySQL1、sql、DB、DBMS分别是什么,他们之间的关系?    DB:         DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)    DBMS:         DataBase Management System(数据库管理系统,常见的有:MySQL Oracle DB2 Sybase SqlServer...)    ...

详解zabbix安装部署(Server端篇)

  分类: 网络与安全     Linux下常用的系统监控软件有Nagios、Cacti、Zabbix、Monit等,这些开源的软件,可以帮助我们更好的管理机器,在第一时间内发现,并警告系统维护人员。         今天开始研究下Zabbix,使用Zabbix的目的,是为了能够更好的监控mysql数据库服务器,并且能够生成图形报表,虽然Nagios也能够...

Python实现mysql数据库增删改查

利用python操作mysql数据库用法简单,环境配置容易,本文将实现对库增、删、改、查的简易封装! 1. 环境配置 安装第三方包,导入模块mysql.connector pip install mysql-connector 2.使用说明 本文将提供add,delete,update,query以及connect五种方法,下边将详述使用参数: 方法名...

PowerDesigner学习笔记(一)----重要基础操作

PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一。Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesigner则与其正好相反,它是以数据库建模起家,后来才发展为一款综合全面的Case工具。 PowerDesigner主要分为7种建模文件: 1.  概念数据模型 (...