寫在最前
如果這個項目讓你有所收獲,記得 Star 關注哦,這對我是非常不錯的鼓勵與支援。
源碼位址(後端):gitee.com/csps/mingyu…
源碼位址(前端):gitee.com/csps/mingyu…
文檔位址:gitee.com/csps/mingyu…
Mybatis 相關推薦閱讀
基礎的東西就不再寫了,本架構資料層采用 mybatis
- MyBatis 入門必讀
- 【資料篇】SpringBoot 整合 MyBatis 操作 MySql
- 【資料篇】SpringBoot 整合 MyBatis-Plus 增強 MyBatis ,基友搭配,效率翻倍
- 【資料篇】SpringBoot 整合 MyBatis-Plus 實作分頁查詢
引入 Mybatis-Plus
修改 mingyue pom
xml複制代碼<!-- mybatis-plus 啟動器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- mybatis-plus 注解 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- mybatis-plus 代碼生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
修改 mingyue-common-bom pom
xml複制代碼<!-- 系統服務 API 子產品 -->
<dependency>
<groupId>com.csp.mingyue</groupId>
<artifactId>mingyue-system-api</artifactId>
<version>${project.version}</version>
</dependency>
修改 mingyue-system-api pom
xml複制代碼<dependencies>
<!-- mybatis-plus 注解 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</dependency>
</dependencies>
修改 mingyue-system-biz pom
xml複制代碼<dependency>
<groupId>com.csp.mingyue</groupId>
<artifactId>mingyue-common-core</artifactId>
</dependency>
<!-- mingyue-system-api -->
<dependency>
<groupId>com.csp.mingyue</groupId>
<artifactId>mingyue-system-api</artifactId>
</dependency>
<!-- Mysql 資料庫驅動 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- mybatis-plus 代碼生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
代碼生成器 mybatis-plus-generator
借助代碼生成器可以縮減一些開發時間~
代碼生成
打開 com.csp.mingyue.system.gen.MysqlCodeGenerator 代碼生成類
java複制代碼public static void main(String[] args) {
FastAutoGenerator.create(
"jdbc:mysql://mingyue-mysql:3306/mingyue?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true",
"root", "mingyue")
// 全局配置
.globalConfig(builder -> {
builder.author("Strive") // 設定作者
.commentDate("yyyy-MM-dd hh:mm:ss") //注釋日期
.outputDir(System.getProperty("user.dir") + "/gen/src/main/java") // 指定輸出目錄
.disableOpenDir() //禁止打開輸出目錄,預設打開
;
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.csp.mingyue.system") // 設定父包名
.pathInfo(Collections.singletonMap(OutputFile.xml,
System.getProperty("user.dir") + "/gen/src/main/resources/mappers")); // 設定mapperXml生成路徑
})
// 政策配置
.strategyConfig(builder -> {
builder.addInclude("sys_user") // 設定需要生成的表名
//.addTablePrefix("sys_") // 設定過濾表字首
// Entity 政策配置
.entityBuilder()
.enableLombok() //開啟 Lombok
.enableFileOverride() // 覆寫已生成檔案
.naming(NamingStrategy.underline_to_camel) //資料庫表映射到實體的命名政策:下劃線轉駝峰命
.columnNaming(NamingStrategy.underline_to_camel) //資料庫表字段映射到實體的命名政策:下劃線轉駝峰命
// Mapper 政策配置
.mapperBuilder()
.enableFileOverride() // 覆寫已生成檔案
// Service 政策配置
.serviceBuilder()
.enableFileOverride() // 覆寫已生成檔案
.formatServiceFileName("%sService") //格式化 service 接口檔案名稱,%s進行比對表名,如 UserService
.formatServiceImplFileName("%sServiceImpl") //格式化 service 實作類檔案名稱,%s進行比對表名,如 UserServiceImpl
// Controller 政策配置
.controllerBuilder()
.enableFileOverride() // 覆寫已生成檔案
;
})
.execute();
}
執行 mian 函數,代碼會生成在根目錄 gen 目錄下,生成代碼結構如下圖:
修改實體類包路徑
生成的 SysUser 實體類,包路徑為:com.csp.mingyue.system.entity.SysUser,修改為:com.csp.mingyue.system.api.entity.SysUser,再修改一下其他引入類的路徑即可。
mybatis-plus 配置類
MybatisPlusConfiguration
mingyue-system-biz 添加 MybatisPlusConfiguration 類配置 mybatis-plus 配置,如掃描路徑、分頁插件等
java複制代碼import cn.hutool.core.net.NetUtil;
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* mybatis-plus 配置類
*
* @author Strive
*/
@AutoConfiguration
@EnableTransactionManagement(proxyTargetClass = true)
@MapperScan("${mybatis-plus.mapperPackage}")
public class MybatisPlusConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分頁插件
interceptor.addInnerInterceptor(paginationInnerInterceptor());
return interceptor;
}
/**
* 分頁插件,自動識别資料庫類型
*/
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
// 設定最大單頁限制數量,預設 500 條,-1 不受限制
paginationInnerInterceptor.setMaxLimit(-1L);
// 分頁合理化
paginationInnerInterceptor.setOverflow(true);
return paginationInnerInterceptor;
}
/**
* 使用網卡資訊綁定雪花生成器
* 防止叢集雪花ID重複
*/
@Primary
@Bean
public IdentifierGenerator idGenerator() {
return new DefaultIdentifierGenerator(NetUtil.getLocalhost());
}
}
META-INF/spring
需要自動導入的類,将包路徑放入 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 檔案中即可(利用的是 SPI 機制)
SPI(Service Provider Interface) 是 JDK 内置的一種服務提供發現機制,可以用來啟用架構擴充和替換元件,主要用于架構中開發,例如 Dubbo、Spring、Common-Logging,JDBC 等采用采用 SPI 機制,針對同一接口采用不同的實作提供給不同的使用者,進而提高了架構的擴充性。
properties複制代碼com.csp.mingyue.system.config.MybatisPlusConfiguration
application.yml
後續配置遷移到 nacos
yaml複制代碼# 端口
server:
port: 8000
spring:
application:
name: @artifactId@
profiles:
# 環境配置
active: @profiles.active@
cloud:
nacos:
# nacos 服務位址
server-addr: @nacos.server@
username: @nacos.username@
password: @nacos.password@
discovery:
# 注冊組
group: @nacos.discovery.group@
namespace: ${spring.profiles.active}
config:
# 配置組
group: @nacos.config.group@
namespace: ${spring.profiles.active}
config:
import:
- optional:nacos:application-common.yml
- optional:nacos:${spring.application.name}.yml
datasource:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: mingyue
url: jdbc:mysql://mingyue-mysql:3306/mingyue?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# MyBatis-Plus 配置
mybatis-plus:
# 不支援多包, 如有需要可在注解配置 或 提升掃包等級
# 例如 com.**.**.mapper
mapperPackage: com.csp.mingyue.**.mapper
# 對應的 XML 檔案位置
mapperLocations: classpath*:/mapper/*Mapper.xml
# 實體掃描,多個package用逗号或者分号分隔
typeAliasesPackage: com.csp.mingyue.**.domain
# 啟動時是否檢查 MyBatis XML 檔案的存在,預設不檢查
checkConfigLocation: false
configuration:
# 自動駝峰命名規則(camel case)映射
mapUnderscoreToCamelCase: true
# MyBatis 自動映射政策
# NONE:不啟用 PARTIAL:隻對非嵌套 resultMap 自動映射 FULL:對所有 resultMap 自動映射
autoMappingBehavior: PARTIAL
# MyBatis 自動映射時未知列或未知屬性處理策
# NONE:不做處理 WARNING:列印相關警告 FAILING:抛出異常和詳細資訊
autoMappingUnknownColumnBehavior: NONE
# 更詳細的日志輸出 會有性能損耗 org.apache.ibatis.logging.stdout.StdOutImpl
# 關閉日志記錄 (可單純使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
# 預設日志輸出 org.apache.ibatis.logging.slf4j.Slf4jImpl
logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
global-config:
# 是否列印 Logo banner
banner: true
dbConfig:
# 主鍵類型
# AUTO 自增 NONE 空 INPUT 使用者輸入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
idType: ASSIGN_ID
# 邏輯已删除值
logicDeleteValue: 1
# 邏輯未删除值
logicNotDeleteValue: 0
insertStrategy: NOT_NULL
updateStrategy: NOT_NULL
where-strategy: NOT_NULL
啟動項目
測試接口,發送請求
bash複制代碼curl --location --request GET 'http://127.0.0.1:8000/sysUser/getSysUsers' \
--header 'User-Agent: Apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8000' \
--header 'Connection: keep-alive'
接口傳回:
json複制代碼{
"code": 200,
"msg": "操作成功",
"data": [
{
"userId": 1,
"username": "mingyue",
"nickname": "明月",
"sex": "0",
"password": "123456",
"phone": "13260718262",
"email": null,
"avatar": null,
"lockFlag": "0",
"delFlag": "0",
"createTime": null,
"updateTime": null,
"createBy": null,
"updateBy": null
}
]
}
小結
下一篇準備優化一下代碼結構,豐富一下接口(使用者名查找使用者資訊接口),預備給 mingyue-auth 認證中心 使用。
原文連結:https://juejin.cn/post/7241495840556187709