自定义Enum共有四篇,本篇为第四篇。前面我们已经实现了把浏览器的参数映射成自定义的枚举,并且把枚举保存到数据库,本篇来看下如果是SpringBoot该如何来做。
测试代码还是跟之前的一样,就不重复发了,请参考:你真的会用Enum吗(2)-集成SpringMVC 你真的会用Enum吗(3)-集成Mybatis
(1)添加扫描Enum的配置类,跟之前的一样:
@EnumComponentScan(basePackages="com.github.xjs.sbdemo.enums")@Configurationpublic class EnumScanConfig {}
(2)注册EnumConverterFactory,之前是在xml中配置的conversionService,现在换成配置类:
@Configurationpublic class MvcConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverterFactory(new EnumConverterFactory());}}
(3)添加ObjectMapper用于序列化和反序列化的配置类,之前是在xml中配置的objectMapper:
@Configurationpublic class EnumObjectMapperConfig {@SuppressWarnings({ "rawtypes", "unchecked" })@Beanpublic 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" })@Beanpublic 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中添加配置:
#datasourcespring.datasource.url=jdbc:sqlite:employees.dbspring.datasource.driver-class-name=org.sqlite.JDBC#mybatismybatis.configuration.map-underscore-to-camel-case=truemybatis.mapperLocations = classpath:com/github/xjs/sbdemo/dao/*.xml
这里我们选用sqlite数据库,其他数据库同理。
然后添加SqlSessionFactory的配置类,基本上把MybatisAutoConfiguration的代码复制一份过来就可以了,这里还是使用之前的EnumSqlSessionFactory :
@org.springframework.context.annotation.Configurationpublic class EnumSqlSessionFactoryConfig {@Autowiredprivate MybatisProperties properties;@Autowiredprivate ResourceLoader resourceLoader;@AutowiredObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider;@Beanpublic 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




