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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM