spring boot mybatis 讀取配置檔案
阿新 • • 發佈:2019-01-28
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>