MyBatisPlus通用枚举
2023-12-16 14:00:33
在实际开发中,可以将具有固定离散值的实体字段设置为枚举类型,对应数据库中可以设置为char(1) 类型,属性字段设置为对应的枚举类型。
如性别字段,一般固定为男和女两个值。
1 首先声明通用枚举属性
声明方式有两种:
- 使用@EnumValue注解枚举属性
@Getter
public enum SexEnum {
MALE(1, "男"),
FEMALE(2, "女");
@EnumValue
private Integer code;
private String desc;
SexEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
}
- 枚举属性,实现 IEnum 接口
@AllArgsConstructor
public enum SexOtherEnum implements IEnum<Integer> {
MALE(1, "男"),
FEMALE(2, "女");
private Integer code;
private String desc;
@Override
public Integer getValue() {
return null;
}
}
2 配置扫描通用枚举
方式一:仅配置指定包内的枚举类使用 MybatisEnumTypeHandler
当添加这个配置后,mybatis-plus 提供的 MybatisSqlSessionFactoryBean 会自动扫描包内合法的枚举类(使用了 @EnumValue 注解,或者实现了 IEnum 接口),分别为这些类注册使用 MybatisEnumTypeHandler。
换句话说,只有指定包下的枚举类会使用新的 TypeHandler。其他包下,或者包内没有做相关改造的枚举类,仍然会使用 mybatis 的 DefaultEnumTypeHandler。
# mybatis-plus配置
mybatis-plus:
# 配置扫描通用枚举,支持统配符 * 或者 ; 分割
type-enums-package: com.giser.mybatisplus.enums
方式二:直接指定 DefaultEnumTypeHandler
此方式用来全局
修改 mybatis 使用的 EnumTypeHandler。
配置文件 resources/application.yml
# mybatis-plus配置
mybatis-plus:
configuration:
default-enum-type-handler: org.apache.ibatis.type.EnumTypeHandler
自定义配置类 MybatisPlusAutoConfiguration
@Configuration
public class MybatisPlusAutoConfiguration {
@Bean
public MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() {
return properties -> {
GlobalConfig globalConfig = properties.getGlobalConfig();
globalConfig.setBanner(false);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setDefaultEnumTypeHandler(MybatisEnumTypeHandler.class);
properties.setConfiguration(configuration);
};
}
}
3 属性字段使用枚举
@Data
@TableName("user")
public class User {
@TableId
private Long id;
// 使用枚举
private SexEnum sex;
}
4 测试
@Test
public void testSexEnum(){
User user = new User();
user.setName("Enum");
user.setAge(20);
//设置性别信息为枚举项,会将@EnumValue注解所标识的属性值存储到数据库
user.setSex(SexEnum.MALE);
//==> Preparing: INSERT INTO user ( id, user_name, age, sex ) VALUES ( ?, ?, ?, ? )
//==> Parameters: 1735182211109437441(Long), Enum(String), 20(Integer), 1(Integer)
//<== Updates: 1
userMapper.insert(user);
}
5 如何序列化枚举值为前端返回值?
- 在SpringBoot环境下
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer(){
return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
}
jackson
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
然后重写toString()方法即可
文章来源:https://blog.csdn.net/SUNBOYmxbsH/article/details/135030825
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!