為了便于在研發過程中數據模型(數據庫表設計)變更后即時做代碼同步,BizWorks ToolKit插件集成了Mybatis-Plus代碼生成工具,支持從數據庫表生成代碼。本文介紹如何從數據庫表批量生成代碼,以及相應的配置說明和項目示例。
從數據庫表批量生成代碼的配置說明
配置值需用半角雙引號("")包含。
BizWorks ToolKit插件使用配置文件(*.mp.yaml)的方式描述MyBatis-Plus代碼生成行為。通常這個配置文件只需配置一次,即可提交到代碼倉庫共享,便于沉淀維護庫表映射到代碼的規則。
配置文件在代碼中沒有預置,如果您需要使用可以在項目的任意位置新建,推薦您將其存放于src/main/resource/bizworks/mybatis-plus/路徑下。
以下規則只符合平臺的MVC代碼模板,代碼模板不匹配情況不適用。generateAllCode默認值為false。
如果generateAllCode設置為true, 則會生成所有的代碼(controller,service,do,dto,mapper,impl..)。
如果generateAllCode設置為false,則只會生成
dao
層代碼(mapper,do)。
最簡配置示例如下。
bizworks:
generator:
mybatisPlusFromDB:
# 數據庫配置信息
dataSource:
url:
username:
password:
global:
# 指定輸出目錄,默認值: ${vcsRoot}/mybatis-plus-default/
# ${vcsRoot} 為代碼倉庫根目錄
outputDir: ${vcsRoot}/mybatis-plus-default/
packageConfig:
# 父包名,默認值:com.bizworks.example.domain.tunnel
parent: com.bizworks.example.domain.tunnel
strategy:
generateAllCode: false
# 配置需要生成的表,如果未配置,則生成數據庫下所有表
includes:
- "demo_table"
上述配置示例完善后即可生成demo_table
對應的代碼。您也可以不配置以生成全表所有庫,或是配置更多緊密相關的表在一個文件同時生成,其他表則配置在其他文件中。
關于完整版配置示例,請參見生成代碼完整版配置。
從數據庫表批量生成代碼
打開IDEA,您可以通過以下兩種方式從數據庫表批量生成代碼。
在左側導航欄,右鍵單擊配置文件(*.mp.yaml)后,選擇 。
在打開的配置文件(*.mp.yaml)中,單擊右鍵后,選擇 。
項目示例
如果您有一個多模塊項目,您可將配置文件放置于starter的/resource/bizworks路徑下,例如下圖中simplification.mp.yaml。
右鍵單擊配置文件simplification.mp.yaml后,選擇從配置文件生成Mybatis-Plus。
如果您只配置了數據庫信息,沒有配置輸出目錄以及需要生成的表(如第1步中的圖片所示)。IDEA則會根據默認輸出目錄輸出生成文件,且會將數據庫中所有表都生成,具體如下圖所示。
默認輸出目錄:項目根目錄/mybatis-plus-default/com/bizworks/example/domain/tunnel。
如果您想將文件生成到某個模塊的某個包下,您可以配置輸出目錄以及Package進行準確位置的輸出,例如:通過配置
includes
進行準確文件的輸出。以步驟1圖中的項目為例,假設您想生成一個表到businessdomain-ninethreezerodomain\ninethreezerodomain-app路徑下,您可以通過配置
outputDir
以及packageConfig.parent
進行生成輸出目錄的配置,如下代碼outputDir
,parent
所示,配置includes
進行表的選擇,具體請參見如下代碼示例。bizworks: generator: mybatisPlusFromDB: # 數據庫配置信息 dataSource: url: username: password: global: # 指定輸出目錄,默認值: ${vcsRoot}/mybatis-plus-default/ # ${vcsRoot} 為項目根目錄 outputDir: ${vcsRoot}/businessdomain-ninethreezerodomain/ninethreezerodomain-app/src/main/java packageConfig: # 父包名,默認值:com.bizworks.example.domain.tunnel parent: ninegroup.generator.businessdomain.ninethreezerodomain.app.mybatisplus.generator strategy: generateAllCode: false # 配置需要生成的表,如果未配置,則生成數據庫下所有表 includes: - "biz_modelcenter_app"
生成結果如下圖所示。
如果您想了解更多的自定義配置,例如:是否啟用
swagger
,是否啟用lombok
,controller
格式化命名等配置,請參見生成代碼完整版配置。
生成代碼精簡版配置
生成代碼精簡版配置的代碼示例如下:
bizworks:
generator:
mybatisPlusFromDB:
# 數據庫配置信息
dataSource:
url:
username:
password:
global:
# 指定輸出目錄,默認值: ${vcsRoot}/mybatis-plus-default/
# ${vcsRoot} 為項目根目錄
outputDir:
packageConfig:
# 父包名,默認值:com.bizworks.example.domain.tunnel
parent:
strategy:
generateAllCode: false
# 配置需要生成的表,如果未配置,則生成數據庫下所有表
includes:
- ""
生成代碼完整版配置
生成代碼完整版配置的代碼示例如下:
bizworks:
generator:
mybatisPlusFromDB:
# 數據庫配置信息
dataSource:
url:
username:
password:
schemaName: ""
global:
# 禁止打開輸出目錄 默認值:true,true = 不打開,false = 打開
disableOpenDir: true
# 指定輸出目錄 默認值: ${vcsRoot}/mybatis-plus-default/
# ${vcsRoot} 為項目根目錄
outputDir:
# 作者名 默認值:BizWorks Toolkit
author: BizWorks Toolkit
# 開啟 kotlin 模式 默認值:false,false = 不開啟,true = 開啟
enableKotlin: false
# 開啟 swagger 模式 默認值:false,false = 不開啟,true = 開啟
enableSwagger: false
# 時間策略 DateType.ONLY_DATE 默認值: DateType.TIME_PACK
dateType: TIME_PACK
# 注釋日期 默認值: yyyy-MM-dd
commentDate: yyyy-MM-dd
packageConfig:
# 父包名 默認值:com.bizworks.example.domain.tunnel
parent:
# 父包模塊名 默認值:無
moduleName: ""
# Entity 包名 默認值:entity
entity: entity
# Service 包名 默認值:service
service: service
# Service Impl 包名 默認值:service.impl
serviceImpl: service.impl
# Mapper 包名 默認值:mapper
mapper: mapper
# Mapper XML 包名 默認值:mapper.xml
xml: mapper.xml
# Controller 包名 默認值:controller
controller: controller
# 路徑配置信息 以xml為例:${vcsRoot}/模塊名/src/main/resources
pathInfo:
parent:
entity:
service:
serviceImpl:
mapper:
xml:
controller:
template:
# 啟用模板, list,不在此列的不會生成相關模板,默認開啟ENTITY,MAPPER 關閉SERVICE,SERVICE_IMPL,CONTROLLER,XML
enable:
- ENTITY
- MAPPER
#(String) 設置實體模板路徑(JAVA) 例:${vcsRoot}/templates/entity.java
entity:
#(String) 設置實體模板路徑(kotlin) /templates/entity.java
entityKt:
#(String) 設置 service 模板路徑 /templates/service.java
service:
#(String) 設置 serviceImpl 模板路徑 /templates/serviceImpl.java
serviceImpl:
#(String) 設置 mapper 模板路徑 /templates/mapper.java
mapper:
#(String) 設置 mapperXml 模板路徑 /templates/mapper.xml
mapperXml:
#(String) 設置 controller 模板路徑 /templates/controller.java
controller:
strategy:
generateAllCode: false
# 開啟大寫命名 默認值:false
enableCapitalMode: false
# 開啟跳過視圖 默認值:false
enableSkipView: false
# 禁用 sql 過濾 默認值:true,語法不能支持使用 sql 過濾表的話,可以考慮關閉此開關
disableSqlFilter: true
# 啟用 schema 默認值:false,多 schema 場景的時候打開
enableSchema: false
# (LikeTable) 模糊表匹配(sql 過濾) likeTable 與 notLikeTable 只能配置一項
likeTable:
# (LikeTable) 模糊表排除(sql 過濾) likeTable 與 notLikeTable 只能配置一項
notLikeTable:
# (String...) 配置需要生成的表 includes 與 excludes 只能配置一項
includes:
- ""
# (String...) 增加表排除匹配(內存過濾) includes 與 excludes 只能配置一項
excludes:
- ""
# (String...) 增加過濾表前綴
tablePrefix:
- ""
# (String...) 增加過濾表后綴
tableSuffix:
- ""
# (String...) 增加過濾字段前綴
fieldPrefix:
- ""
# (String...) 增加過濾字段后綴
fieldSuffix:
- ""
# 實體策略配置
entity:
#覆蓋已生成文件 默認false,false = 不覆蓋,true = 覆蓋
enableFileOverride: false
# (INameConvert) 名稱轉換實現
nameConvert:
# (String) 設置父類 com.baomidou.global.BaseEntity
superClass:
# 禁用生成 serialVersionUID 默認值:true,true = 不生成serID,false = 生成
disableSerialVersionUID: true
# 開啟生成字段常量 默認值:false
enableColumnConstant: false
# 開啟鏈式模型 默認值:false
enableChainModel: false
# 開啟 lombok 模型 默認值:true,true = 開啟,false = 不開啟
enableLombok: true
# 開啟 Boolean 類型字段移除 is 前綴 默認值:false
enableRemoveIsPrefix: false
# 開啟生成實體時生成字段注解 默認值:true
enableTableFieldAnnotation: true
# 開啟 ActiveRecord 模型 默認值:false
enableActiveRecord: false
# (String) 樂觀鎖字段名(數據庫)
versionColumnName:
# (String) 樂觀鎖屬性名(實體)
versionPropertyName:
# (String) 邏輯刪除字段名(數據庫)
logicDeleteColumnName:
# (String) 邏輯刪除屬性名(實體)
logicDeletePropertyName:
# 數據庫表映射到實體的命名策略 默認下劃線轉駝峰命名:NamingStrategy.underline_to_camel
naming: underline_to_camel
# 數據庫表字段映射到實體的命名策略 默認為 null,未指定按照 naming 執行
columnNaming:
# (String...) 添加父類公共字段
superEntityColumns:
- ""
- ""
# (String...) 添加忽略字段
ignoreColumns:
- ""
- ""
# (IdType) 全局主鍵類型
idType:
# (String) 格式化文件名稱
formatFileName:
# controller 策略配置
controller:
#覆蓋已生成文件 默認false不覆蓋
enableFileOverride: false
# (String) 默認true 不生成controller
disable: true
# (String) 設置父類 com.baomidou.global.BaseController
superClass: ""
# 開啟駝峰轉連字符 默認值:false
enableHyphenStyle: false
# 開啟生成@RestController 控制器 默認值:false
enableRestStyle: false
# (String) 格式化文件名稱
formatFileName:
# service 策略配置
service:
#覆蓋已生成文件 默認false不覆蓋
enableFileOverride: false
#(String) 設置 service 接口父類 com.baomidou.global.BaseService
superServiceClass:
#(String) 設置 service 實現類父類 com.baomidou.global.BaseServiceImpl
superServiceImplClass:
#(String) 格式化 service 接口文件s名稱
formatServiceFileName:
#(String) 格式化 service 實現類文件名稱
formatServiceImplFileName:
# mapper 策略配置
mapper:
#覆蓋已生成文件 默認false不覆蓋
enableFileOverride: false
#(String) 設置父類 默認:com.baomidou.mybatisplus.core.mapper.BaseMapper
superClass: "com.baomidou.mybatisplus.core.mapper.BaseMapper"
# 開啟 @Mapper 注解 annotationClass – 注解Class 默認為 org.apache.ibatis.annotations.Mapper
mapperAnnotation: org.apache.ibatis.annotations.Mapper
# 啟用 BaseResultMap 生成 默認值:false
enableBaseResultMap: false
# 啟用 BaseColumnList 默認值:false
enableBaseColumnList: false
#(Class<? extends Cache>) 設置緩存實現類 MyMapperCache.class
cache:
#(String) 格式化 mapper 文件名稱
formatMapperFileName:
#(String) 格式化 xml 實現類文件名稱
formatXmlFileName: