【轉】SpringBoot Mybatis 讀取配置文件


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>    

參考:https://blog.csdn.net/javahighness/article/details/53044655


免責聲明!

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



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