一般在SpringBoot项目中,都是通过mybatis-generator插件读取generatorConfig.xml自动生成mapper.xml文件、Mapper.java、entity实体类等。如果有枚举类转换处理,可以放到mybatisAppConfig.xml文件中配置。然后,通过设置一个简单的数据源配置类就可以了,如下:
@Configuration @MapperScan("com.glodon.fates.release.dao") public class MybatisConfig { //空,什么也不写,会加载默认的sqlSessionFactory类 }
但是,如果你是多数据源,那么你需要将上面空的部分手动配置成每个数据源特有的属性。这样,mybatis就不会自动加载
MybatisAutoConfiguration.java这个配置类里面的sqlSessionFactory。而这个类做的其中一件事情就是加载mybatisAppConfig.xml配置文件!一旦你用了自己的写的sqlSessionFactory,但是有没有手动配置mybatisAppConfig.xml文件,就会无法加载其中的typeHandler枚举处理类。所以手动配置多数据源的时候,应该这样写:
@Configuration @MapperScan(basePackages = "com.glodon.fates.datatransfer.dao.release", sqlSessionTemplateRef = "releaseSqlSessionTemplate") public class ReleaseDataSourceConfig { @Value("${spring.datasource.release.url}") private String releaseUrl; @Value("${spring.datasource.release.username}") private String releaseUsername; @Value("${spring.datasource.release.password}") private String releasePassword; /** * release系统数据源配置. */ @Bean(name = "releaseDataSource") public DataSource releaseDataSource() { HikariConfig config = new HikariConfig(); config.setDriverClassName("com.mysql.jdbc.Driver"); config.setAutoCommit(false); config.setJdbcUrl(releaseUrl); config.setUsername(releaseUsername); config.setPassword(releasePassword); return new HikariDataSource(config); } /** * sqlSession配置. */ @Bean(name = "releaseSqlSessionFactory") public SqlSessionFactory releaseSqlSessionFactory(@Qualifier("releaseDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatisAppConfig.xml")); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:com/glodon/fates/datatransfer/mapper/release/*.xml")); return sessionFactoryBean.getObject(); } @Bean(name = "releaseTransactionManager") public DataSourceTransactionManager releaseTransactionManager(@Qualifier("releaseDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "releaseSqlSessionTemplate") public SqlSessionTemplate releaseSqlSessionTemplate(@Qualifier("releaseSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
红色部分代码是关键的配置mybatisAppConfig.xml路径的地方,只要加上这段就可以了。具体原理可以参考:
http://www.mybatis.org/mybatis-3/zh/configuration.html (mybatis中的xml映射关系),也可以参考
Spring-boot-autoconfigure的jar包下的org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.java源码类。