暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

你真的会用Enum吗(4)-集成SpringBoot

爪哇优太儿 2019-05-27
317


自定义Enum共有四篇,本篇为第四篇。前面我们已经实现了把浏览器的参数映射成自定义的枚举,并且把枚举保存到数据库,本篇来看下如果是SpringBoot该如何来做。

测试代码还是跟之前的一样,就不重复发了,请参考:你真的会用Enum吗(2)-集成SpringMVC 你真的会用Enum吗(3)-集成Mybatis

(1)添加扫描Enum的配置类,跟之前的一样:



@EnumComponentScan(basePackages="com.github.xjs.sbdemo.enums")
@Configuration
public class EnumScanConfig {
}


(2)注册EnumConverterFactory,之前是在xml中配置的conversionService,现在换成配置类:



@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(new EnumConverterFactory());
}
}

(3)添加ObjectMapper用于序列化和反序列化的配置类,之前是在xml中配置的objectMapper:

@Configuration
public class EnumObjectMapperConfig {


@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public SimpleModule serializeEnumModule() {
SimpleModule module = new SimpleModule();
EnumSerializer enumSerializer = new EnumSerializer();
List enumClasses =EnumFactory.getAllEnumClass();
for(Object enumClass : enumClasses) {
Class clazz = (Class)enumClass;
module.addSerializer(clazz,enumSerializer);
}
return module;
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public SimpleModule deserializeEnumModule() {
SimpleModule module = new SimpleModule();
EnumDeserializer enumDeserializer = new EnumDeserializer();
List enumClasses =EnumFactory.getAllEnumClass();
for(Object enumClass : enumClasses) {
Class clazz = (Class)enumClass;
module.addDeserializer(clazz, enumDeserializer);
}
return module;
}
}

数据库部分修改如下:

首先在application.properties中添加配置:

#datasource
spring.datasource.url=jdbc:sqlite:employees.db
spring.datasource.driver-class-name=org.sqlite.JDBC
#mybatis
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapperLocations = classpath:com/github/xjs/sbdemo/dao/*.xml

这里我们选用sqlite数据库,其他数据库同理。

然后添加SqlSessionFactory的配置类,基本上把MybatisAutoConfiguration的代码复制一份过来就可以了,这里还是使用之前的EnumSqlSessionFactory :

@org.springframework.context.annotation.Configuration
public class EnumSqlSessionFactoryConfig {
@Autowired
private MybatisProperties properties;
@Autowired
private ResourceLoader resourceLoader;
@Autowired
ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider;
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
EnumSqlSessionFactory factory = new EnumSqlSessionFactory();
factory.setDataSource(dataSource);
if (StringUtils.hasText(this.properties.getConfigLocation())) {
factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
}
Configuration configuration = this.properties.getConfiguration();
if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
configuration = new Configuration();
}
List<ConfigurationCustomizer> configurationCustomizers = this.configurationCustomizersProvider.getIfAvailable();
if (configuration != null && !CollectionUtils.isEmpty(configurationCustomizers)) {
for (ConfigurationCustomizer customizer : configurationCustomizers) {
customizer.customize(configuration);
}
}
if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
factory.setMapperLocations(this.properties.resolveMapperLocations());
}
return factory.getObject();
}
}

完整的源代码在:https://github.com/xjs1919/enumdemo/tree/master/springbootdemo

如果感觉对你有用,欢迎打赏点赞加关注。

文章转载自爪哇优太儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论