• 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所在的位置和别名所在的包即可。
     
     

     
     
     
  • 相关阅读:
    Dubbo限制大数据传输的解决方案
    出现The folder is already a source folder
    用Eclipse进行远程Debug代码
    Scanner和BufferReader之区别
    IO操作中的建议
    Android Serialization序列化
    flash画图API:解析obj格式
    UVA 6475 Effective Infection Time
    swift user guide.pdf下载
    【cocos2d-x制作别踩白块儿】第一期:游戏介绍
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5874103.html
Copyright © 2020-2023  润新知