??在引入相關(guān)數(shù)據(jù)庫持久化相關(guān)依賴庫之前朋鞍,我們可以考慮到棋凳,當我們因業(yè)務(wù)開發(fā)需要,引入各種各樣的依賴庫時坠陈,Jar包沖突是我們必須面對的一個問題萨惑,Spring為了解決這些Jar包的沖突捐康,推出了各種bom,最著名的就是Spring IO Platform bom庸蔼,其中最核心的三個是:spring-framework-bom解总、spring-boot-dependencies、platform-bom姐仅。我們這里參考Spring管理Jar包的方式花枫,新建一個GitEgg-Platform平臺工程,提供各種第三方組件的配置及自定義方法掏膏,使用子工程gitegg-platform-bom統(tǒng)一管理GitEgg自定義方法擴展jar包及第三方Jar包版本劳翰。
1、首先在GitEgg-Platform工程下新建gitegg-platform-db用于管理系統(tǒng)需要用到的數(shù)據(jù)庫驅(qū)動馒疹、數(shù)據(jù)庫連接池的jar包及配置佳簸,新建gitegg-platform-mybatis用于管理系統(tǒng)需要用到的持久層框架,建好的結(jié)構(gòu)如下:
2颖变、修改GitEgg-Platform根目錄下的pom.xml生均,設(shè)置工程編碼方式,及引入的Spring Boot腥刹,Spring Cloud马胧,gitegg-platform-bom版本:
<?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.gitegg.platform</groupId>
<artifactId>GitEgg-Platform</artifactId>
<name>${project.artifactId}</name>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>gitegg-platform-bom</module>
<module>gitegg-platform-db</module>
<module>gitegg-platform-mybatis</module>
</modules>
<properties>
<!-- jdk版本1.8 -->
<java.version>1.8</java.version>
<!-- maven-compiler-plugin插件版本,Java代碼編譯 -->
<maven.plugin.version>3.8.1</maven.plugin.version>
<!-- maven編譯時指定編碼UTF-8 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<!-- 項目統(tǒng)一字符集編碼UTF-8 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 項目統(tǒng)一字符集編碼UTF-8 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- SpringBoot版本號 -->
<spring.boot.version>2.3.3.RELEASE</spring.boot.version>
<!-- SpringCloud版本號 -->
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
<!-- SpringPlatform版本號 -->
<spring.platform.version>Cairo-SR8</spring.platform.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.gitegg.platform</groupId>
<artifactId>gitegg-platform-bom</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>gitegg-release</id>
<name>Release Repository</name>
<url>https://packages.aliyun.com/maven/repository/2020515-release-dpxo1j/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun-plugin</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<profiles>
<profile>
<id>dev</id>
<properties>
<profileActive>dev</profileActive>
</properties>
<activation>
<!--默認為dev環(huán)境打包方式-->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>test</profileActive>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<profileActive>pro</profileActive>
</properties>
</profile>
</profiles>
</project>
3衔峰、修改gitegg-platform-bom工程下的pom.xml佩脊,引入目前需要的數(shù)據(jù)庫驅(qū)動,數(shù)據(jù)連接池及Mybatis-Plus:
<?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">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath />
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.gitegg.platform</groupId>
<artifactId>gitegg-platform-bom</artifactId>
<name>${project.artifactId}</name>
<version>${gitegg.project.version}</version>
<packaging>pom</packaging>
<properties>
<!-- jdk版本1.8 -->
<java.version>1.8</java.version>
<!-- maven-compiler-plugin插件版本朽色,Java代碼編譯 -->
<maven.plugin.version>3.8.1</maven.plugin.version>
<!-- maven編譯時指定編碼UTF-8 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<!-- 項目統(tǒng)一字符集編碼UTF-8 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 項目統(tǒng)一字符集編碼UTF-8 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- GitEgg項目統(tǒng)一設(shè)置版本號 -->
<gitegg.project.version>1.0-SNAPSHOT</gitegg.project.version>
<!-- mysql數(shù)據(jù)庫驅(qū)動 -->
<mysql.connector.version>8.0.17</mysql.connector.version>
<!-- postgresql數(shù)據(jù)庫驅(qū)動 -->
<postgresql.connector.version>9.1-901.jdbc4</postgresql.connector.version>
<!-- 數(shù)據(jù)庫連接池Druid -->
<druid.version>1.1.23</druid.version>
<!-- Mybatis Plus增強工具 -->
<mybatis.plus.version>3.4.0</mybatis.plus.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- gitegg數(shù)據(jù)庫驅(qū)動及連接池 -->
<dependency>
<groupId>com.gitegg.platform</groupId>
<artifactId>gitegg-platform-db</artifactId>
<version>${gitegg.project.version}</version>
</dependency>
<!-- gitegg mybatis-plus -->
<dependency>
<groupId>com.gitegg.platform</groupId>
<artifactId>gitegg-platform-mybatis</artifactId>
<version>${gitegg.project.version}</version>
</dependency>
<!-- mysql數(shù)據(jù)庫驅(qū)動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
<!-- postgresql數(shù)據(jù)庫驅(qū)動 -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.connector.version}</version>
</dependency>
<!-- 數(shù)據(jù)庫連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- Mybatis Plus增強工具 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
4邻吞、修改gitegg-platform-db工程下的pom.xml,只引入數(shù)據(jù)庫驅(qū)動及數(shù)據(jù)庫連接池相關(guān)jar包:
<?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">
<parent>
<artifactId>GitEgg-Platform</artifactId>
<groupId>com.gitegg.platform</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gitegg-platform-db</artifactId>
<name>${project.artifactId}</name>
<version>${project.parent.version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
5葫男、修改gitegg-platform-mybatis工程下的pom.xml,只引入mybatis-plus相關(guān)jar包:
<?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">
<parent>
<artifactId>GitEgg-Platform</artifactId>
<groupId>com.gitegg.platform</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gitegg-platform-mybatis</artifactId>
<name>${project.artifactId}</name>
<version>${project.parent.version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
6崔列、pom.xml文件配置好之后梢褐,在IDEA右側(cè)窗口,Maven中點擊install赵讯,將包安裝到本地盈咳,這樣GitEgg-Cloud工程就可以引用GitEgg-Platform工程的jar包了,同理边翼,測試及正式環(huán)境需要點擊deploy鱼响,將jar包發(fā)布到測試的Maven私服,或者正式環(huán)境的Maven私服组底。
7丈积、回到GitEgg-Cloud項目筐骇,在gitegg-service下的pom.xml里面引入gitegg-platform-db和gitegg-platform-mybatis
<?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">
<parent>
<artifactId>GitEgg-Cloud</artifactId>
<groupId>com.gitegg.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gitegg-service</artifactId>
<packaging>pom</packaging>
<modules>
<module>gitegg-service-base</module>
<module>gitegg-service-bigdata</module>
<module>gitegg-service-system</module>
</modules>
<dependencies>
<!-- gitegg數(shù)據(jù)庫驅(qū)動及連接池 -->
<dependency>
<groupId>com.gitegg.platform</groupId>
<artifactId>gitegg-platform-db</artifactId>
</dependency>
<!-- gitegg mybatis-plus -->
<dependency>
<groupId>com.gitegg.platform</groupId>
<artifactId>gitegg-platform-mybatis</artifactId>
</dependency>
<!-- spring boot web核心包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring boot 健康監(jiān)控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
8、在gitegg-service-system工程下修改application.yml江滨,增加數(shù)據(jù)庫連接和mybatis的配置:
server:
port: 8001
spring:
application:
name: gitegg-service-system
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1/gitegg_cloud?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true
username: root
password: root
initialSize: 1
minIdle: 3
maxActive: 20
# 配置獲取連接等待超時的時間
maxWait: 60000
# 配置間隔多久才進行一次檢測铛纬,檢測需要關(guān)閉的空閑連接,單位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一個連接在池中最小生存的時間唬滑,單位是毫秒
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打開PSCache告唆,并且指定每個連接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計晶密,'wall'用于防火墻
filters: config,stat,slf4j
# 通過connectProperties屬性來打開mergeSql功能擒悬;慢SQL記錄
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;
# 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
useGlobalDataSourceStat: true
mybatis-plus:
mapper-locations: classpath*:/com/gitegg/*/*/mapper/*Mapper.xml
typeAliasesPackage: com.gitegg.*.*.entity
global-config:
#主鍵類型 0:"數(shù)據(jù)庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數(shù)字類型唯一ID)", 3:"全局唯一ID UUID";
id-type: 2
#字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
field-strategy: 2
#駝峰下劃線轉(zhuǎn)換
db-column-underline: true
#刷新mapper 調(diào)試神器
refresh-mapper: true
#數(shù)據(jù)庫大寫下劃線轉(zhuǎn)換
#capital-mode: true
#邏輯刪除配置
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
9、修改GitEggSystemApplication稻艰,添加要掃描的mapper路徑聲明:
package com.gitegg.service.system;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* gitegg-system 啟動類
*/
@MapperScan("com.gitegg.*.*.mapper")
@SpringBootApplication
public class GitEggSystemApplication {
public static void main(String[] args) {
SpringApplication.run(GitEggSystemApplication.class,args);
}
}
10懂牧、修改GitEgg-Platform工程中的gitegg-platform-db和gitegg-platform-mybatis,新增mybatis-plus分頁配置连锯,和Druid數(shù)據(jù)庫連接配置归苍,此配置類預(yù)留,后面需要自定義修改运怖。
- DruidConfig.java內(nèi)容如下:
package com.gitegg.platform.db.config;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DruidConfig {
}
- MybatisPlusConfig.java內(nèi)容如下:
package com.gitegg.platform.mybatis.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.gitegg.**.mapper.**")
public class MybatisPlusConfig {
/**
* 新的分頁插件,一緩和二緩遵循mybatis的規(guī)則,需要設(shè)置 MybatisConfiguration#useDeprecatedExecutor = false
* 避免緩存出現(xiàn)問題(該屬性會在舊插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
11拼弃、增加測試類,通過訪問controller->service->dao層摇展,獲取數(shù)據(jù)庫數(shù)據(jù)吻氧。新建controller、service咏连、impl盯孙、mapper、entity祟滴、dto包振惰,這些包和類,后面可以用系統(tǒng)自動生成垄懂,不需要每次都自己手動建立骑晶。
- SystemController.java文件內(nèi)容:
package com.gitegg.service.system.controller;
import com.gitegg.service.system.service.ISystemService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "system")
@AllArgsConstructor
public class SystemController {
private final ISystemService systemService;
@GetMapping(value = "list")
public Object list() {
return systemService.list();
}
@GetMapping(value = "page")
public Object page() {
return systemService.page();
}
}
- ISystemService.java文件內(nèi)容:
package com.gitegg.service.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gitegg.service.system.entity.SystemTable;
import java.util.List;
public interface ISystemService {
List<SystemTable> list();
Page<SystemTable> page();
}
- SystemServiceImpl.java 內(nèi)容:
package com.gitegg.service.system.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gitegg.service.system.entity.SystemTable;
import com.gitegg.service.system.mapper.SystemTableMapper;
import com.gitegg.service.system.service.ISystemService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
*/
@Service
@AllArgsConstructor
public class SystemServiceImpl implements ISystemService {
private final SystemTableMapper systemTableMapper;
@Override
public List<SystemTable> list() {
return systemTableMapper.list();
}
@Override
public Page<SystemTable> page() {
Page<SystemTable> page = new Page<>(1, 10);
List<SystemTable> records = systemTableMapper.page(page);
page.setRecords(records);
return page;
}
}
- SystemTableMapper.java內(nèi)容:
package com.gitegg.service.system.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gitegg.service.system.entity.SystemTable;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface SystemTableMapper {
List<SystemTable> list();
List<SystemTable> page(Page<SystemTable> page);
}
- SystemTable.java內(nèi)容:
package com.gitegg.service.system.entity;
import lombok.Data;
@Data
public class SystemTable {
private Long id;
private String name;
}
- SystemTableMapper.xml內(nèi)容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.gitegg.service.system.mapper.SystemTableMapper" >
<select id="list" resultType="com.gitegg.service.system.entity.SystemTable">
select * from system_table
</select>
<select id="page" resultType="com.gitegg.service.system.entity.SystemTable">
select * from system_table
</select>
</mapper>
12、運行GitEggSystemApplication草慧,在控制臺看是否啟動成功桶蛔,如果啟動成功,在瀏覽器中分別訪問http://127.0.0.1:8001/system/list和http://127.0.0.1:8001/system/page漫谷,可以看到數(shù)據(jù)里面的數(shù)據(jù):
本文源碼在https://gitee.com/wmz1930/GitEgg的chapter-05分支仔雷。
GitEgg-Cloud是一款基于SpringCloud整合搭建的企業(yè)級微服務(wù)應(yīng)用開發(fā)框架,開源項目地址:
Gitee: https://gitee.com/wmz1930/GitEgg
GitHub: https://github.com/wmz1930/GitEgg
歡迎感興趣的小伙伴Star支持一下。