为了便于在研发过程中数据模型(数据库表设计)变更后即时做代码同步,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: