上篇集成了Druid數據鏈接池;此次來集成MyBatis-Plus;總之相比Druid來講仍是很容易的;html
1: 首先引入Jar包:java
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 項目說明 --> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <!-- Spring Boot 版本 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 依賴版本控制 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!-- 全局依賴 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <!-- MAVEN依賴庫 --> <dependencies> <!-- SpringBoot 核心庫 begin--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <!-- maven項目熱部署;更改避免重啓--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!-- SpringBoot 核心庫 end--> <!-- MySql數據庫 begin--> <dependency><!--驅動--> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency><!--鏈接池--> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version> </dependency> <!-- 注意: 在配置過程當中 mysql-connector-java 的版本號會 和 druid 衝突,從而 在項目啓動時發出: com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker - Cannot resolve com.mysq.jdbc.Connection.ping method. Will use 'SELECT 1' instead. 的警告; 因此注意 mysql-connector-java 的版本 --> <!-- MySql數據庫 end --> <!-- MyBatis-Plus begin --> <dependency><!-- MyBatis --> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency><!-- K神 --> <groupId>com.baomidou</groupId> <artifactId>mybatisplus-spring-boot-starter</artifactId> <version>1.0.5</version> </dependency> <dependency><!-- MyBatis-Plus 核心庫 --> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.1.4</version> </dependency> <dependency><!-- 生成代碼模板引擎 --> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> <!-- MyBatis-Plus end --> <!-- 測試 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- json數據 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.22</version> </dependency> </dependencies> </project>
2: application.yml 文件 配置:mysql
#Spring Boot 配置文件: #端口 server: port: 8080 spring: #數據源 datasource: #數據庫訪問配置 type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/diary?autoReconnect=true&characterEncoding=utf-8 username: root password: 123456 #鏈接池配置 # 初始化時創建物理鏈接的個數 initialSize: 1 # 最小鏈接池數量 minIdle: 1 # 最大鏈接池數量 maxActive: 20 # 鏈接時最大等待時間,單位毫秒 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個鏈接在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 300000 # 用來檢測鏈接是否有效的sql,要求是一個查詢語句 validationQuery: SELECT 1 FROM DUAL # 申請鏈接時執行 validationQuery 檢測鏈接是否有效,作了這個配置會下降性能 testOnBorrow: false # 歸還鏈接時執行 validationQuery 檢測鏈接是否有效,作了這個配置會下降性能 testOnReturn: false # 建議配置爲true,不影響性能,而且保證安全性;申請鏈接的時候檢測, # 若是空閒時間大於 timeBetweenEvictionRunsMillis,執行 validationQuery 檢測鏈接是否有效 testWhileIdle: true # 是否緩存preparedStatement,也就是 PSCache poolPreparedStatements: true # 指定每一個鏈接上 PSCache 的大小 maxOpenPreparedStatements: 20 # 配置監控統計攔截的filters,屬性類型是字符串,經過別名的方式配置擴展插件, # 經常使用的插件有:監控統計用的stat;日誌用的log4j;防護sql注入的wall filters: stat,wall,log4j # 經過 connectProperties 屬性來打開mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.merggSql=ture;druid.stat.slowSqlMillis=5000 # 合併多個DruidDataSource的監控數據 useGlobalDataSourceStat: true #mybatis mybatis-plus: #把xml文件放在com.XX.mapper.*中可能會出現找到的問題,這裏把他放在resource下的mapper中 mapper-locations: classpath:/mapper/*Mapper.xml #實體掃描,多個package用逗號或者分號分隔 typeAliasesPackage: com.gy.demo.entity typeEnumsPackage: com.baomidou.springboot.entity.enums global-config: #主鍵類型 0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局惟一ID (數字類型惟一ID)", 3:"全局惟一ID UUID"; id-type: 2 #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷" field-strategy: 2 #駝峯下劃線轉換 db-column-underline: true #刷新mapper 調試神器 refresh-mapper: true #數據庫大寫下劃線轉換 #capital-mode: true #序列接口實現類配置 #key-generator: com.gy.demo.xxx #邏輯刪除配置 logic-delete-value: 0 logic-not-delete-value: 1 #自定義填充策略接口實現 #meta-object-handler: com.gy.demo.xxx #自定義SQL注入器 #sql-injector: com.gy.demo.xxx configuration: #駝峯轉換 map-underscore-to-camel-case: true #全局緩存處理 cache-enabled: false #logging logging: level: warn
3: 編寫配置文件:(注:和官網上的相同)git
package com.gy.demo.config; import com.baomidou.mybatisplus.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.plugins.PerformanceInterceptor; import com.baomidou.mybatisplus.plugins.parser.ISqlParser; import com.baomidou.mybatisplus.plugins.parser.tenant.TenantHandler; import com.baomidou.mybatisplus.plugins.parser.tenant.TenantSqlParser; import com.baomidou.mybatisplus.toolkit.PluginUtils; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; import org.apache.ibatis.mapping.MappedStatement; import org.mybatis.spring.annotation.MapperScan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.List; /** * Description : MyBatis-Plus 配置 * Created by com on 2017/12/5 * * @author geYang **/ @Configuration @MapperScan("com.gy.demo.mapper") //添加mybatis掃描註解,參數爲mapper文件所在的包名 public class MybatisPlusConfig { private Logger logger = LoggerFactory.getLogger(MybatisPlusConfig.class); /** * mybatis-plus SQL執行效率插件【生產環境能夠關閉】 */ @Bean public PerformanceInterceptor performanceInterceptor() { logger.info("Mybatis-Plus: 開啓 SQL執行效率 插件"); return new PerformanceInterceptor(); } /** * mybatis-plus分頁插件;文檔:http://mp.baomidou.com */ @Bean public PaginationInterceptor paginationInterceptor() { // 開啓 PageHelper 的支持 logger.info("Mybatis-Plus: 開啓 PageHelper 的支持"); PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); paginationInterceptor.setLocalPage(true); /* * 【測試多租戶】 SQL 解析處理攔截器<br> * 這裏固定寫成住戶 1 實際狀況你能夠從cookie讀取,所以數據看不到 【 麻花藤 】 這條記錄( 注意觀察 SQL )<br> */ /**/ logger.info("Mybatis-Plus: 【測試多租戶】 SQL 解析處理攔截器"); List<ISqlParser> sqlParserList = new ArrayList<>(); TenantSqlParser tenantSqlParser = new TenantSqlParser(); tenantSqlParser.setTenantHandler(new TenantHandler() { @Override public Expression getTenantId () { return new LongValue(1L); } @Override public String getTenantIdColumn () { return "tenant_id"; } @Override public boolean doTableFilter (String s) { // 過濾自定義查詢此時無租戶信息約束【 麻花藤 】出現 String user = "user"; return user.equals(s); } }); sqlParserList.add(tenantSqlParser); paginationInterceptor.setSqlParserList(sqlParserList); paginationInterceptor.setSqlParserFilter(metaObject -> { MappedStatement ms = PluginUtils.getMappedStatement(metaObject); // 過濾自定義查詢此時無租戶信息約束【 麻花藤 】出現 String method = "com.gy.demo.mapper.UserMapper.selectListBySQL"; return method.equals(ms.getId()); }); return paginationInterceptor; } }
MyBatis-Plus官網: http://baomidou.oschina.io/mybatis-plus-doc/#/?id=%e7%ae%80%e4%bb%8bweb
不清楚的能夠看看MyBatis-Plus官網;spring
SpringBoot官方文檔: https://docs.spring.io/spring-boot/docs/current/reference/html/sql
項目配置源碼: https://gitee.com/ge.yang/SpringBoot數據庫