spring boot mybatis 读取配置文件

原创 2016年11月05日 12:15:42

spring boot mybatis 配置整理

一、加载mybatis的配置

1、手写配置,写死在代码里

    import java.io.IOException;
    import java.util.Properties;

    import javax.sql.DataSource;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.DefaultResourceLoader;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.annotation.TransactionManagementConfigurer;

    import com.github.pagehelper.PageHelper;

    @Configuration
    @EnableTransactionManagement
    public class MybatisConfiguration implements TransactionManagementConfigurer{

        private static Log logger = LogFactory.getLog(MybatisConfiguration.class);

        @Autowired
        private DataSource dataSource;

        // 提供SqlSeesion
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactory sqlSessionFactoryBean() {
            try {
                SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
                sessionFactoryBean.setDataSource(dataSource);
                // 手写配置
                // 配置类型别名
                sessionFactoryBean.setTypeAliasesPackage("com.zsx.entity");

                // 配置mapper的扫描,找到所有的mapper.xml映射文件
                Resource[] resources = new PathMatchingResourcePatternResolver()
                        .getResources("classpath:mybatis/mapper/*.xml");
                sessionFactoryBean.setMapperLocations(resources);

                // 加载全局的配置文件
                sessionFactoryBean.setConfigLocation(
                        new DefaultResourceLoader().getResource("classpath:mybatis/mybatis-config.xml"));

                //添加插件 
                sessionFactoryBean.setPlugins(new Interceptor[]{pageHelper()});

                return sessionFactoryBean.getObject();
            } catch (IOException e) {
                logger.warn("mybatis resolver mapper*xml is error");
                return null;
            } catch (Exception e) {
                logger.warn("mybatis sqlSessionFactoryBean create error");
                return null;
            }
        }


        @Bean
        public PlatformTransactionManager annotationDrivenTransactionManager() {
            return new DataSourceTransactionManager(dataSource);
        }


        @Bean
        public PageHelper pageHelper(){
            logger.info("MyBatis分页插件PageHelper");
            //分页插件
            PageHelper pageHelper = new PageHelper();
            Properties properties = new Properties();
            properties.setProperty("offsetAsPageNum", "true");
            properties.setProperty("rowBoundsWithCount", "true");
            properties.setProperty("reasonable", "true");
            properties.setProperty("supportMethodsArguments", "true");
            properties.setProperty("returnPageInfo", "check");
            properties.setProperty("params", "count=countSql");
            pageHelper.setProperties(properties);
            return pageHelper;
        }


    }

2、读取配置文件方式

先在配置文件application.yml中添加

# MyBatis
mybatis:
    # 配置类型别名
    typeAliasesPackage: com.zsx.entity
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath:mybatis/mapper/*.xml
    # 加载全局的配置文件
    configLocation: classpath:mybatis/mybatis-config.xml

然后配置文件为:

    import java.io.IOException;

    import javax.sql.DataSource;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.DefaultResourceLoader;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.annotation.TransactionManagementConfigurer;

    @Configuration
    @EnableTransactionManagement
    public class MybatisConfiguration implements TransactionManagementConfigurer{

        private static Log logger = LogFactory.getLog(MybatisConfiguration.class);

    //  配置类型别名
        @Value("${mybatis.typeAliasesPackage}")
        private String typeAliasesPackage;

    //  配置mapper的扫描,找到所有的mapper.xml映射文件
        @Value("${mybatis.mapperLocations}")
        private String mapperLocations;

    //  加载全局的配置文件
        @Value("${mybatis.configLocation}")
        private String configLocation;

        @Autowired
        private DataSource dataSource;
        // DataSource配置
    //  @Bean
    //  @ConfigurationProperties(prefix = "spring.datasource")
    //  public DruidDataSource dataSource() {
    //      return new com.alibaba.druid.pool.DruidDataSource();
    //  }

        // 提供SqlSeesion
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactory sqlSessionFactoryBean() {
            try {
                SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
                sessionFactoryBean.setDataSource(dataSource);

                // 读取配置 
                sessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);

                // 
                Resource[] resources = new PathMatchingResourcePatternResolver()
                        .getResources(mapperLocations);
                sessionFactoryBean.setMapperLocations(resources);
    //      //
                sessionFactoryBean.setConfigLocation(
                        new DefaultResourceLoader().getResource(configLocation));

                //添加插件  (改为使用配置文件加载了)
    //          sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper()});

                return sessionFactoryBean.getObject();
            } catch (IOException e) {
                logger.warn("mybatis resolver mapper*xml is error");
                return null;
            } catch (Exception e) {
                logger.warn("mybatis sqlSessionFactoryBean create error");
                return null;
            }
        }


    //  @Bean
    //    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    //        return new SqlSessionTemplate(sqlSessionFactory);
    //    }

    //  @Bean
    //  public PlatformTransactionManager transactionManager(){
    //      return new DataSourceTransactionManager(dataSource);
    //  }


        @Bean
        public PlatformTransactionManager annotationDrivenTransactionManager() {
            return new DataSourceTransactionManager(dataSource);
        }


    }
  • 最后还有配置一个扫描mapper的类:

    import org.mybatis.spring.mapper.MapperScannerConfigurer;
    import org.springframework.boot.autoconfigure.AutoConfigureAfter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    //TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
    @AutoConfigureAfter({MybatisConfiguration.class})
    public class MyBatisMapperScannerConfig {
    
        @Bean
        public MapperScannerConfigurer mapperScannerConfigurer(){
            MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
    
            mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
            mapperScannerConfigurer.setBasePackage("com.zsx.dao");
    
    
            return mapperScannerConfigurer;
        }
    
    }
    
  • 还有一个 mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <properties>
            <property name="dialect" value="mysql" />
        </properties>
        <settings>
            <!-- 开启驼峰匹配 -->
            <setting name="mapUnderscoreToCamelCase" value="true"/>
            <!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true,设置只是为了展示出来 -->
            <setting name="cacheEnabled" value="true" />
            <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 系统默认值是true,设置只是为了展示出来 -->
            <setting name="lazyLoadingEnabled" value="true" />
            <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 系统默认值是true,设置只是为了展示出来 -->
            <setting name="multipleResultSetsEnabled" value="true" />
            <!--使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 系统默认值是true,设置只是为了展示出来 -->
            <setting name="useColumnLabel" value="true" />
            <!--允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 
                Derby)。 系统默认值是false,设置只是为了展示出来 -->
            <setting name="useGeneratedKeys" value="false" />
            <!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE,设置只是为了展示出来 -->
            <setting name="defaultExecutorType" value="SIMPLE" />
            <!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null,设置只是为了展示出来 -->
            <setting name="defaultStatementTimeout" value="25000" />
        </settings>
    
        <!-- 分页助手 -->
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageHelper">
                <!-- 数据库方言 -->
                <property name="dialect" value="mysql" />
                <property name="offsetAsPageNum" value="true" />
                <!-- 设置为true时,使用RowBounds分页会进行count查询 会去查询出总数 -->
                <property name="rowBoundsWithCount" value="true" />
                <property name="pageSizeZero" value="true" />
                <property name="reasonable" value="true" />
            </plugin>
        </plugins>
    </configuration>    
    
版权声明:本文为博主原创文章,未经博主允许不得转载。(如有问题请邮件至634790417@qq.com,本人不经常上CSDN博客)

Spring Boot MyBatis 连接数据库

最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,Github上有代码:https://gi...
  • catoop
  • catoop
  • 2016年01月21日 10:50
  • 62212

SpringBoot之Mybatis篇(注解&配置文件)(MVC版)

整体的项目结构,遵循MVC架构。红框内的是此次需要用到的文件。 src/main/java/com/zhu/DemoApplication.java package com.zhu;import ...
  • zt_fucker
  • zt_fucker
  • 2017年03月03日 15:02
  • 2399

Spring Boot 集成MyBatis

Spring Boot 集成MyBatis在配置MyBatis前,我们先配置一个druid数据源。Spring Boot 集成druiddruid有很多个配置选项,使用Spring Boot 的Con...
  • isea533
  • isea533
  • 2015年12月27日 15:29
  • 296428

Spring boot Mybatis

最近刚接触Spring boot,正是因为他的及简配置方便开发,促使我下定决心要用它把之前写的项目重构,那么问题来了,spring boot怎么整合mybatis呢,下面几个配置类来搞定。 1、文件结...
  • xiaoyu411502
  • xiaoyu411502
  • 2015年09月01日 22:01
  • 109504

spring boot配置mybatis和事务管理

Spring Boot配置Mybatis一、spring boot与mybatis的配置1.首先,spring boot 配置mybatis需要的全部依赖如下: org.springframewor...
  • wohaqiyi
  • wohaqiyi
  • 2017年06月07日 08:37
  • 26521

[Java][MyBatis]mapperLocations属性通配符的使用

mapperLocations属性通配符的使用
  • szwangdf
  • szwangdf
  • 2014年04月11日 12:17
  • 64267

Spring+SpringMVC +MyBatis整合配置文件案例

Spring+SpringMVC +MyBatis整合配置文件解析
  • qq_26654727
  • qq_26654727
  • 2017年04月13日 19:12
  • 417

使mybatis配置文件支持通配符,包括别名和mapper!

mybatis的配置文件人口只有一个,而且别名必须写在这个文件里面,很难维护,要想实现web项目间的依赖,更是十分困难。所以重写了factoryBean(基于spring管理的方式),代码如下: /...
  • haofeng82
  • haofeng82
  • 2012年08月13日 17:14
  • 17486

MyBatis mapperLocations、basePackage多数据路径配置

MyBatis mapperLocations、basePackage配置多个目录的方法
  • loongshawn
  • loongshawn
  • 2017年02月16日 15:29
  • 12812

MyBatis-Spring配置简单了解

MyBatis-Spring配置简单了解SqlSessionFactoryBean配置在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创...
  • isea533
  • isea533
  • 2015年05月11日 11:10
  • 47022
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring boot mybatis 读取配置文件
举报原因:
原因补充:

(最多只允许输入30个字)