generator-maven-plugin基于模板的 Maven 代码生成器
前言
该生成器是基于mybatis-plus的基础上根据个人在实际生产中所遇到过的各种设计而进行思考扩展的。为了提供更好地扩展性,使用者只需提供自定义的模板即可生成对应的文件,也可使用默认模板。目前模板语言只支持freemarker,因为作为一个生成工具个人认为无需考虑性能与使用哪种模板语言上的问题也没有对模板这方面进行深究,个人对freemarker也只是略懂(遇到不懂的表达式自己也是百度一下,无需深学),但也足以作为生成所需。项目地址:[maven版],[依赖类生成版]。通过依赖注入生成的版本之后可能会废弃,仅供研究。虽然觉得功能已足够,但还是希望使用者们发现扩展性强的功能可以提一下建议,采纳后会尽快更新版本。
1.功能简介
目前可选择的生成器很多,个人目前所接触过的有tk、mybatis源生、mybatis-plus、jOOQ的生成器,各个项目基本都是基于持久层框架而选择相应的生成器的,这也使得生成器对应的持久层框架适配性最好。当然,扩展性强的也有,mybatis-plus是个人认为以上几个生成器中扩展性最好的,缺点是需要添加依赖,生成器类无法为每个项目重用,特别是在多模块项目中修改量较大。以下是个人基于mybatis-plus生成器的功能与个人的思考扩展后集成为maven生成器插件的主要功能:
- 基于数据库字段注释指定样式的常量生成(建议一个entity对应一个constant,这样即便负责不同模块的负责人或接手维护者也可迅速定位一个实体的常量维护类,而无需考虑因开发者因对领域的不同理解划分而增加查找难度,当然仅是个人在开发过程中所遇到的问题)
- 只生成/不生成表名含指定关键字的service、serviceImpl模板文件(基于服务中的领域耦合可考虑哪些数据表无需生成)
- 根据自定义的freemarker模板生成文件,设置了(如自定义生成相应的Manager层进行业务下沉,VO、DTO生成)
2.快速开始(mvn generator:generate)
-
2.1 pom.xml插件配置
<plugin>
<groupId>io.github.wilson-he</groupId>
<artifactId>generator-maven-plugin</artifactId>
<version>LATEST</version>
<configuration>
<basePackage>io.github.test</basePackage>
<dataSource>
<url><![CDATA[jdbc:mysql://localhost:3306/wilson?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false]]></url>
<username>root</username>
<password>tiger</password>
<driverType>MYSQL</driverType>
</dataSource>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
-
2.2 生成效果图
3. 目前支持的配置项
- outputDirectory: 输出绝对路径,默认生成到当前pom项目模块的target/generate-sources下
- basePackage: 各层文件生成的基包[**required**]
- isCleanBefore(boolean): 文件生成前是否清空当前模块下的target目录,默认false
- useSwagger(boolean):生成文件是否带swagger注解,默认false
- superEntityClass:entity父类,完整包路径.类名
- author:模板author值
- dataSource: 数据库配置[**required**]
- url
- username
- password
- driverType:数据库驱动类型(MYSQL,ORACLE,POSTGRE_SQL)
- templates: 自定义模板配置、模板生成配置,不配置则使用默认模板配置生成
- entityPath: resources下的自定义entity模板相对路径
- constantPath
- daoPath
- xmlPath
- servicePath
- serviceImplPath
- controllerPath
- entityPattern: entity名称样式,如:%sDO将以{tableName}DO命名生成
- daoPattern
- xmlPattern
- servicePattern
- serviceImplPattern
- controllerPattern
- excludeEntity: true/false,是否生成entity模板类
- excludeXxx: 同excludeEntity
- excludeController: 默认true,其它层默认false
- customs: 对象列表,自定义模板
- layerName: 模板分层名(请勿使用已存在ftl变量)
- subPackage: 所在子包
- path: 模板在resources下的相对路径
- exclusions: 字符串数组,不生成表名含数组内字符串的所有文件,默认空
- inclusions: 字符串数组,只生成表名含数组内字符串的所有文件,默认空
- upstreamExclusions: 字符串数组,不生成表名含数组内字符串的自定义模板、service、serviceImpl、controller文件,默认空
- upstreamInclusions: 字符串数组,只生成表名含数组内字符串的自定义模板、service、serviceImpl、controller文件,默认空
- logicDeleteFieldName: 全局逻辑删除字段名,默认空
- tablePrefix: 字符串数组,表名前缀,默认空