代码生成器配置
MyBatis-Plus 代码生成器是一个强大的工具,它能够根据数据库表结构自动生成对应的实体类、Mapper接口、XML映射文件以及Service层代码。这个工具极大地简化了基于MyBatis框架的开发流程,提高了开发效率,尤其是在需要处理大量数据库表时。
主要特点
- 自动化:代码生成器能够自动根据数据库表结构生成相应的Java代码,减少了手动编写重复代码的工作量。
- 可配置性:通过配置文件或代码,可以灵活地指定生成代码的包路径、表名、字段名、模板等,满足不同项目的需求。
- 模板支持:支持自定义代码模板,可以根据项目需求定制代码风格和结构。
- 多数据库支持:支持多种数据库类型,如MySQL、Oracle、SQL Server等,只需配置相应的数据库连接信息即可。
- 集成简单:可以轻松集成到现有的项目中,只需几行代码即可启动代码生成过程。
使用场景
- 新项目搭建:在新项目开始时,可以使用代码生成器快速生成基础的CRUD代码,加快项目启动速度。
- 表结构变更:当数据库表结构发生变化时,可以通过代码生成器更新对应的Java代码,保持代码与数据库的一致性。
- 重复性工作:在需要编写大量相似CRUD操作的场景中,代码生成器可以显著减少重复劳动,提高开发效率。
如何使用
- 配置数据源:指定数据库类型、连接URL、用户名和密码等。
- 配置策略:选择需要生成代码的表,设置表名和字段名的命名策略等。
- 配置包信息:设置生成代码的包路径,包括实体类、Mapper接口、Service等。
- 配置模板:如果需要自定义代码风格,可以配置或创建自定义的代码模板。
- 执行生成:运行代码生成器,根据配置生成相应的Java代码。
示例代码
通过MyBatis-Plus代码生成器,开发者可以更加专注于业务逻辑的实现,而不是繁琐的CRUD代码编写,从而提升开发效率和代码质量。
基本配置
数据源配置(dataSource)
- 类型:
DataSourceConfig
- 默认值:
null
数据源配置用于指定需要生成代码的具体数据库。通过配置数据源,代码生成器能够连接到数据库并获取表结构信息,以便生成相应的代码。
示例配置:
数据库表配置(strategy)
- 类型:
StrategyConfig
- 默认值:
null
数据库表配置用于指定需要生成哪些表的代码或者排除哪些表。通过策略配置,可以灵活地控制代码生成的范围。
示例配置:
包名配置(packageInfo)
- 类型:
PackageConfig
- 默认值:
null
包名配置用于指定生成代码的包路径。通过配置包名,可以确保生成的代码放置在正确的目录结构中。
示例配置:
模板配置(template)
- 类型:
TemplateConfig
- 默认值:
null
模板配置允许自定义代码生成的模板,实现个性化操作。通过模板配置,可以定制生成代码的格式和内容。
示例配置:
全局策略配置(globalConfig)
- 类型:
GlobalConfig
- 默认值:
null
全局策略配置提供了一些全局的设置,如作者信息、生成路径等。
示例配置:
注入配置(injectionConfig)
- 类型:
InjectionConfig
- 默认值:
null
注入配置允许注入自定义参数等操作以实现个性化操作。通过注入配置,可以在代码生成过程中添加额外的逻辑。
示例配置:
通过以上配置,MyBatis-Plus 代码生成器可以根据你的需求生成符合项目结构的代码,大大提高了开发效率。记得根据实际项目需求调整配置参数,以达到最佳的代码生成效果。
数据源配置(dataSource)详解
数据源配置是 MyBatis-Plus 代码生成器的关键部分,它定义了如何连接到数据库以及如何查询数据库信息。以下是数据源配置的详细说明和示例。
dbQuery
- 描述:数据库信息查询类,用于执行数据库查询操作。
- 默认实现:根据
dbType
自动选择对应数据库的内置实现。 - 自定义:可以实现
IDbQuery
接口来自定义数据库查询 SQL 语句,以返回特定内容。
dbType
- 描述:数据库类型,是必须配置的选项。
- 内置支持:MyBatis-Plus 内置了多种常用数据库类型,如 MySQL、Oracle、PostgreSQL 等。
schemaName
- 描述:数据库 schema name,某些数据库系统(如 PostgreSQL)需要指定。
- 示例:在 PostgreSQL 中,可以指定为
public
。
typeConvert
- 描述:类型转换,用于将数据库字段类型转换为 Java 类型。
- 默认实现:根据
dbType
自动选择对应数据库的内置实现。 - 自定义:如果内置转换类型不满足需求,可以实现
ITypeConvert
接口来自定义数据库字段类型到 Java 类型的转换,或者实现IColumnType
接口进行更高级的自定义。
url
- 描述:数据库连接的 URL,包含了连接到数据库所需的所有信息。
driverName
- 描述:数据库驱动程序的名称,用于建立数据库连接。
username
- 描述:数据库连接的用户名,用于身份验证。
password
- 描述:数据库连接的密码,用于身份验证。
示例配置
在这个示例中,我们配置了一个 MySQL 数据库的数据源。我们指定了数据库类型、连接 URL、用户名、密码和驱动名称。这些信息将用于建立与数据库的连接,并从中获取表结构信息,以便生成相应的 Java 代码。
请根据你的实际数据库配置调整这些参数,确保它们与你的数据库环境相匹配。
数据库表配置(strategy)详解
数据库表配置用于定义生成代码时如何处理数据库表和字段。通过策略配置,可以指定生成哪些表的代码、如何命名实体类和字段、以及是否包含特定的注解或属性。
isCapitalMode
- 描述:是否使用大写命名模式。
- 默认值:
false
skipView
- 描述:是否跳过视图。
- 默认值:
false
naming
- 描述:数据库表映射到实体的命名策略。
- 默认值:使用下划线转驼峰命名。
columnNaming
- 描述:数据库表字段映射到实体的命名策略。
- 默认值:未指定时,按照
naming
策略执行。
tablePrefix
- 描述:表前缀,用于过滤带有特定前缀的表。
fieldPrefix
- 描述:字段前缀,用于过滤带有特定前缀的字段。
superEntityClass
- 描述:自定义继承的 Entity 类全称,带包名。
superEntityColumns
- 描述:自定义基础的 Entity 类,公共字段。
superMapperClass
- 描述:自定义继承的 Mapper 类全称,带包名。
superServiceClass
- 描述:自定义继承的 Service 类全称,带包名。
superServiceImplClass
- 描述:自定义继承的 ServiceImpl 类全称,带包名。
superControllerClass
- 描述:自定义继承的 Controller 类全称,带包名。
enableSqlFilter Since 3.3.1
- 描述:默认激活进行 SQL 模糊表名匹配。关闭后,
likeTable
与notLikeTable
将失效,include
和exclude
将使用内存过滤。 - 默认值:
true
- 注意:如果有 SQL 语法兼容性问题,请手动设置为
false
。已知无法使用的情况包括 MyCat 中间件。更多信息请查看 ISSUE-2102
include
- 描述:需要包含的表名,当
enableSqlFilter
为false
时,允许正则表达式。
likeTable Since 3.3.0
- 描述:模糊匹配表名,与 notLikeTable 二选一配置。
exclude
- 描述:需要排除的表名,当
enableSqlFilter
为false
时,允许正则表达式。
notLikeTable Since 3.3.0
- 描述:模糊排除表名,与 likeTable 二选一配置。
entityColumnConstant
- 描述:【实体】是否生成字段常量。
- 默认值:
false
entityBuilderModel @Deprecated
- 描述:【实体】是否为构建者模型.
- 默认值:
false
- 注意:自 3.3.2 开始更名为 chainModel
chainModel Since 3.3.2
- 描述:【实体】是否为链式模型。
- 默认值:
false
- 注意:3.3.2 以下版本默认生成了链式模型,3.3.2 以后,默认不生成,如有需要,请开启。
entityLombokModel
- 描述:【实体】是否为 Lombok 模型。
- 默认值:
false
entityBooleanColumnRemoveIsPrefix
- 描述:Boolean 类型字段是否移除 is 前缀。
- 默认值:
false
restControllerStyle
- 描述:生成
@RestController
控制器。 - 默认值:
false
controllerMappingHyphenStyle
- 描述:驼峰转连字符。
- 默认值:
false
entityTableFieldAnnotationEnable
- 描述:是否生成实体时,生成字段注解。
- 默认值:
false
versionFieldName
- 描述:乐观锁属性名称。
logicDeleteFieldName
- 描述:逻辑删除属性名称。
tableFillList
- 描述:表填充字段。
示例配置
在这个示例中,我们配置了一个策略,指定了大写命名模式、使用 Lombok 模型、生成 REST 风格的控制器,并指定了需要包含和排除的表。我们还设置了表前缀和驼峰转连字符的控制器映射风格。
请根据你的项目需求调整这些配置参数,以确保生成的代码符合你的期望。
包名配置(packageInfo)详解
包名配置用于定义生成代码的包结构,确保生成的代码放置在正确的目录中。通过配置包名,可以控制代码的组织方式,使其符合项目的架构设计。
parent
- 描述:父包名,即所有生成代码的顶级包名。
- 默认值:如果未设置,则需要为每个子包名指定完整的包路径。
moduleName
- 描述:父包模块名,用于区分不同的模块或子系统。
entity
- 描述:Entity 包名,即实体类所在的包名。
service
- 描述:Service 包名,即服务接口所在的包名。
serviceImpl
- 描述:Service Impl 包名,即服务实现类所在的包名。
mapper
- 描述:Mapper 包名,即 Mapper 接口所在的包名。
xml
- 描述:Mapper XML 包名,即 Mapper XML 文件所在的包名。
controller
- 描述:Controller 包名,即控制器类所在的包名。
pathInfo
- 描述:路径配置信息,用于指定生成代码的物理路径。
示例配置
在这个示例中,我们配置了一个包结构,其中父包名为 com.example
,每个子包名都根据其功能进行了设置。例如,实体类将放置在 com.example.mybatisplus.entity
包中,服务接口将放置在 com.example.mybatisplus.service
包中,以此类推。
请根据你的项目结构和组织习惯调整这些配置参数,以确保生成的代码能够正确地集成到你的项目中。
模板配置(template)详解
模板配置允许开发者自定义代码生成器使用的模板,以生成符合特定项目风格和需求的代码。MyBatis-Plus 代码生成器支持多种类型的模板,包括实体类、服务类、Mapper 接口、XML 映射文件和控制器类等。
entity
- 描述:Java 实体类模板,用于生成 Java 实体类代码。
entityKt
- 描述:Kotlin 实体类模板,用于生成 Kotlin 实体类代码。
service
- 描述:Service 类模板,用于生成服务接口代码。
serviceImpl
- 描述:Service impl 实现类模板,用于生成服务实现类代码。
mapper
- 描述:mapper 模板,用于生成 Mapper 接口代码。
xml
- 描述:mapper xml 模板,用于生成 Mapper XML 映射文件代码。
controller
- 描述:controller 控制器模板,用于生成控制器类代码。
示例配置
在这个示例中,我们配置了不同类型的模板路径。例如,实体类模板路径设置为 templates/entity.java.vm
,服务类模板路径设置为 templates/service.java.vm
,以此类推。这些模板路径指向了项目中自定义的模板文件,代码生成器将使用这些模板来生成相应的代码。
请确保你的模板文件路径正确,并且模板文件遵循 Velocity 或 Freemarker 等模板引擎的语法。通过自定义模板,你可以控制生成的代码的结构、注释、命名风格等,以满足项目的特定需求。
在实际使用中,你可能需要根据项目的具体情况调整模板配置,例如,如果你的项目使用 Kotlin 语言,则需要配置 entityKt
模板路径。如果你的项目不需要生成某些类型的代码(如 XML 映射文件),则可以不配置相应的模板。
全局策略配置(globalConfig)详解
全局策略配置提供了一些全局的设置,如输出目录、文件覆盖、开发者信息等,以及一些高级选项,如 Kotlin 模式、Swagger2 集成、ActiveRecord 模式等。
outputDir
- 描述:生成文件的输出目录。
- 默认值:
D 盘根目录
fileOverride
- 描述:是否覆盖已有文件。
- 默认值:
false
open
- 描述:是否在生成后自动打开输出目录。
- 默认值:
true
enableCache
- 描述:是否在 XML 中添加二级缓存配置。
- 默认值:
false
author
- 描述:开发人员名称。
- 默认值:
null
kotlin
- 描述:是否开启 Kotlin 模式。
- 默认值:
false
swagger2
- 描述:是否开启 Swagger2 模式。
- 默认值:
false
activeRecord
- 描述:是否开启 ActiveRecord 模式。
- 默认值:
false
baseResultMap
- 描述:是否开启 BaseResultMap。
- 默认值:
false
baseColumnList
- 描述:是否开启 baseColumnList。
- 默认值:
false
dateType
- 描述:时间类型对应策略。
- 默认值:
TIME_PACK
entityName
- 描述:实体命名方式,
%s
为占位符。 - 默认值:
null
- 示例:
%sEntity
生成UserEntity
mapperName
- 描述:Mapper 命名方式,
%s
为占位符。 - 默认值:
null
- 示例:
%sDao
生成UserDao
xmlName
- 描述:Mapper XML 命名方式,
%s
为占位符。 - 默认值:
null
- 示例:
%sDao
生成UserDao.xml
serviceName
- 描述:Service 命名方式,
%s
为占位符。 - 默认值:
null
- 示例:
%sBusiness
生成UserBusiness
serviceImplName
- 描述:Service impl 命名方式,
%s
为占位符。 - 默认值:
null
- 示例:
%sBusinessImpl
生成UserBusinessImpl
controllerName
- 描述:Controller 命名方式,
%s
为占位符。 - 默认值:
null
- 示例:
%sAction
生成UserAction
idType
- 描述:指定生成的主键的 ID 类型。
- 默认值:
null
示例配置
在这个示例中,我们配置了全局策略,指定了输出目录、文件覆盖、开发者信息等,并设置了各种命名方式和主键ID类型。这些配置将影响生成的代码的结构和内容。
请根据你的项目需求和偏好调整这些配置参数,以确保生成的代码符合你的期望。例如,如果你希望生成的实体类名以 Entity
结尾,可以将 entityName
设置为 %sEntity
。如果你希望在生成的 XML 文件中包含二级缓存配置,可以将 enableCache
设置为 true
。
注入配置(injectionConfig)详解
注入配置允许开发者自定义代码生成器的行为,包括自定义返回配置、自定义输出文件、自定义文件创建逻辑等。这些配置提供了灵活性,使得代码生成器能够适应更复杂的项目需求。
map
- 描述:自定义返回配置 Map 对象,该对象可以传递到模板引擎,通过
cfg.xxx
引用。 - 用途:用于在模板中访问自定义的配置信息。
fileOutConfigList
- 描述:自定义输出文件,通过配置
FileOutConfig
指定模板文件和输出文件,实现自定义文件生成。 - 用途:用于生成非标准格式的文件,或者在特定目录下生成文件。
fileCreate
- 描述:自定义判断是否创建文件,实现
IFileCreate
接口。 - 用途:用于判断某个类是否需要覆盖创建,或者实现文件差异算法
merge
。
initMap
- 描述:注入自定义 Map 对象,注意需要通过
setMap
方法放入。 - 用途:用于在代码生成器中注入额外的配置信息。
示例配置
在这个示例中,我们配置了注入配置,包括自定义 Map 对象、自定义输出文件配置和自定义文件创建逻辑。
- 在
initMap
方法中,我们创建了一个包含作者和项目名称的 Map 对象,这些信息可以在模板中通过cfg.xxx
引用。 - 在
getFileOutConfig
方法中,我们返回了一个自定义的FileOutConfig
对象,指定了输出文件的路径。 - 在
getFileCreate
方法中,我们返回了一个自定义的IFileCreate
实现,用于判断文件是否需要创建。
请根据你的项目需求调整这些配置参数,以确保生成的代码符合你的期望。例如,如果你需要在模板中访问额外的配置信息,可以在 initMap
方法中添加这些信息。如果你需要生成特定格式的文件,可以在 getFileOutConfig
方法中指定相应的模板和输出路径。如果你需要自定义文件创建逻辑,可以在 getFileCreate
方法中实现相应的判断逻辑。