zoukankan      html  css  js  c++  java
  • 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所在的位置和别名所在的包即可。
     
     

     
     
     
  • 相关阅读:
    求一些数字字符参数的和(Java)
    《大道至简》第二章 读后感
    华为机试题 简单错误记录
    华为机试 购物单
    华为机试题 提取不重复的整数
    华为机试题 合并表结构
    华为机试 取近似值
    华为机试题 质数因子
    华为机试题 进制转换
    华为机试题 字符串分割
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5874103.html
Copyright © 2011-2022 走看看