說明:Java-based Config。
不是通過 mybatis 的 SqlSessionFactoryBuilder 來創建 SqlSessionFactory ,而是通過 mybatis-spring 的 SqlSessionFactoryBean 來獲取。
1、首先要有一個
DataSource 。
需要注意,事務管理器也在這里注冊。(
mybatis-spring插件會自動調用該事務管理器)
@Bean(name = "transactionManager") public DataSourceTransactionManager dataSourceTransactionManager() { DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); dataSourceTransactionManager.setDataSource(this.dataSource()); return dataSourceTransactionManager; }
2、然后,注冊
SqlSessionFactoryBean(
或者
SqlSessionFactory,二選一,內容一致)。如下:
@Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(this.dataSource()); // sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); // 這里可以通過mybatis-config.xml 來設置 typeAliasPackage和mapper。 // Resource[] mapperLocations = new Resource[] { new ClassPathResource("com.expert.dao") }; // 這個和@MapperScan沖突嗎?這個設置有問題。 // sqlSessionFactoryBean.setMapperLocations(mapperLocations);//<mappers> sqlSessionFactoryBean.setTypeAliasesPackage(PojoBasePackage); // sqlSessionFactoryBean.setCache(cache); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject(); // It can be specified a Configuration instance directly without MyBatis XML configuration file. sqlSessionFactory.getConfiguration().setMapUnderscoreToCamelCase(true);// 開啟駝峰映射 sqlSessionFactory.getConfiguration().setCacheEnabled(true); sqlSessionFactory.getConfiguration().setLazyLoadingEnabled(true); sqlSessionFactory.getConfiguration().setAggressiveLazyLoading(false); // Class<Object> logImpl = sqlSessionFactory.getConfiguration().getTypeAliasRegistry().resolveAlias("SLF4J"); sqlSessionFactory.getConfiguration().setLogImpl(Slf4jImpl.class);// logImpl sqlSessionFactory.getConfiguration().setLogPrefix("###SPRING_BOOT###MYBATIS###"); sqlSessionFactory.getConfiguration().setDefaultExecutorType(ExecutorType.REUSE); sqlSessionFactory.getConfiguration().setUseGeneratedKeys(true); return sqlSessionFactory; }
這里還設置了一堆參數。需要注意的是,
①設置了
TypeAliasesPackage 。
②設置了
Configuration 。
③mybatis-spring會自動創建
Configuration 對象,所以通過
sqlSessionFactory.getConfiguration() 即可獲取並進行設置。
3、再注冊一個
SqlSessionTemplate,這是 mybatis-spring 的
核心。
@Bean @Scope(BeanDefinition.SCOPE_PROTOTYPE) // 多例? public SqlSessionTemplate sqlSessionTemplate() throws Exception { return new SqlSessionTemplate(this.sqlSessionFactory()); }
4、設置mapper的位置,有兩種方法。
①推薦這種,簡單。
@Configuration @MapperScan(basePackages = { "com.expert.dao" }) public class DruidDataSourceConfig{ // ... }
②
@Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setBasePackage(DaoBasePackage); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return mapperScannerConfigurer; }
至此,已可以成功運行。
但是,還有
更簡單的方法,那就是
MyBatis-Spring-Boot-Starter 。使用該Starter時,會自動查找DataSource,並自動創建SqlSessionFactoryBean 和 SqlSessionTemplate。所以,只需要設置mapper所在的位置和別名所在的包即可。