mybatis-plus-枚举处理

MyBatis-Plus枚举配置详解,
本文详细讲解了如何在MyBatis-Plus中通过`typeEnumsPackage`配置枚举处理,以及避免默认EnumOrdinalTypeHandler的使用,适合理解数据库ORM配置的开发者。

properties文件的配置

//加载处理枚举类型处理的包路径
mybatis-plus.typeEnumsPackage=com.common.base.enums.**

 

yaml配置文件的配置

 

# MP 配置
mybatis-plus:
#  type-enums-package: com.baomidou.mybatisplus.samples.enums.enums
  configuration:
    # 3.0.8之前版本问题默认将枚举注册为EnumOrdinalTypeHandler,这是错误的方式,默认是 org.apache.ibatis.type.EnumTypeHandler
    # 如果项目之中实体统一使用IEnum或注解的方式,可配置成 com.baomidou.mybatisplus.extension.handlers.EnumTypeHandler,也可省略上面的type-enums-package配置
    # 配置type-enums-package只对注解方式的枚举处理能提前加载缓存.
    default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler

mybatis的默认处理方法:

org.apache.ibatis.type.TypeHandlerRegistry 在启动时会加默认的枚举处理类:

<think>好的,我现在需要帮助用户解决在MyBatis-Plus中配置枚举类型解析器的问题。首先,我需要回顾一下用户提供的引用内容,确保答案准确。 用户提到了引用[2],里面提到MyBatis-Plus简化了枚举映射。引用[4]详细说明了如何配置枚举处理,包括配置文件中的typeEnumsPackage和Jackson的序列化设置。另外,引用[5]提到注解的使用场景,可能与@EnumValue相关。 首先,我需要确认MyBatis-Plus处理枚举的几种方式。默认情况下,MyBatis-Plus使用MybatisEnumTypeHandler(引用[1]和[4]),这个处理器会调用枚举的name()方法。但如果需要存储其他值,比如自定义的code,需要使用@EnumValue注解标记字段,并在配置中指定枚举包路径。 然后,步骤应该包括:1. 添加注解到枚举类,2. 配置typeEnumsPackage,3. 可选地处理JSON序列化。用户可能还需要示例代码,比如枚举类的定义和配置文件的修改。 另外,用户可能遇到的常见问题,比如Jackson默认使用枚举的name(),所以需要配置WRITE_ENUMS_USING_TO_STRING,使其调用toString方法,而toString需要返回数据库存储的值。这部分在引用[4]中有说明,需要包含在回答中。 确保步骤清晰,分点说明,并给出代码示例。同时,根据用户提供的引用,正确标注引用标记,比如在配置typeEnumsPackage时引用[4],在提到默认处理器时引用[1]和[2]。 最后,生成相关问题,这些问题应该围绕枚举配置的扩展,比如处理复杂枚举、与Jackson的整合、常见错误等。</think>### 如何在MyBatis-Plus中配置枚举类型解析器 #### 1. **理解MyBatis-Plus枚举处理机制** MyBatis-Plus通过`DefaultEnumTypeHandler`默认将枚举的`name()`值映射到数据库字段。若需存储自定义值(如数字、字符串),需通过注解和配置实现[^2][^4]。 #### 2. **定义枚举类并添加注解** 在枚举类中,使用`@EnumValue`标记需要存储到数据库的字段: ```java public enum SexEnum { MALE(1, "男"), FEMALE(2, "女"); @EnumValue // 标记此字段为数据库存储值 private final int code; private final String desc; SexEnum(int code, String desc) { this.code = code; this.desc = desc; } } ``` #### 3. **配置枚举包路径** 在`application.yml`中指定枚举类所在包,使MyBatis-Plus自动扫描: ```yaml mybatis-plus: typeEnumsPackage: com.example.enums # 替换为实际包路径 ``` #### 4. **修改默认枚举处理器(可选)** 若需全局使用自定义处理器,可覆盖默认配置: ```yaml mybatis-plus: configuration: default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler[^1] ``` #### 5. **处理JSON序列化问题** Spring Boot集成Jackson时,需配置枚举序列化方式以匹配数据库值: ```java @Bean public Jackson2ObjectMapperBuilderCustomizer enumCustomizer() { return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); } ``` 在枚举类中重写`toString()`方法返回`code`值: ```java @Override public String toString() { return String.valueOf(this.code); } ``` 此配置确保接口返回与数据库存储值一致[^3]。 #### 6. **验证映射结果** 最终数据库字段将存储`code`值(如1、2),而非枚举名称(MALE/FEMALE)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值