SpringBoot-MyBatis-Plus 框架集成

上篇集成了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數據庫

相關文章
相關標籤/搜索