MyBatis-Spring 使用總結


說明: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所在的位置和別名所在的包即可。
 
 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM