zoukankan      html  css  js  c++  java
  • Mybatis枚举映射异常

    异常描述

    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

  • 相关阅读:
    集群、分布式、负载均衡区别与联系
    Android--加载大分辨率图片到内存
    Android--MP3播放器MediaPlayer
    Android--SoundPool
    Android--MediaPlayer高级
    Android--调用系统照相机拍照与摄像
    Android--SurfaceView播放视频
    Android--使用VideoView播放视频
    Android--使用Camera拍照
    Vue组件选项props
  • 原文地址:https://www.cnblogs.com/Dm920/p/15787462.html
Copyright © 2011-2022 走看看