generator-maven-plugin

基于模板的 Maven 代码生成器
授权协议 Apache
开发语言 Java
所属分类 程序开发、 代码生成工具
软件类型 开源软件
地区 国产
投 递 者 卫弘图
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

前言

该生成器是基于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: 字符串数组,表名前缀,默认空

 相关资料
  • 我的目标是使用OpenAPI3.0生成Spring Boot REST客户端。 我希望首先生成API的OpenAPI规范文件(springdoc-openapi-maven-plugin),然后使用Maven从该文件(swagger-codegen-maven-plugin)生成客户机代码。 我的问题是swagger-codegen-maven-plugin在springdoc-openapi-m

  • 问题内容: 我正在忙于使用Maven将现有项目从Ant构建转换为Ant构建。该构建的一部分包括使用hibernate hbm2java工具将.hbm.xml文件的集合转换为Java。这是用于执行此操作的Ant脚本的片段: 我在互联网上四处张望,有些人(我认为)似乎在Maven中使用Ant,而另一些人使用Maven插件。我宁愿避免混合使用Ant和Maven。任何人都可以建议一种方法来执行此操作,以便

  • 我有多个xsd模式,我想将它们解组到同一文件夹下的不同包中。我尝试了这两个插件,两个插件似乎都能很好地处理这两种配置,但在maven-jaxb2-plugin的情况下,eclipse插件会无限期地生成类(因为=true),但是如果我没有指定forceRegenate,当我运行我的配置有任何问题吗? jaxb2 maven插件 maven-jaxb2-plugin 以及build helper ma

  • 问题内容: 我想将多个xsd模式解组到 同一 文件夹下的不同程序包中。我尝试了两个插件,并且似乎都可以在这两种配置下正常工作,但是在使用maven- jaxb2-plugin的情况下,eclipse插件会无限期地生成类(由于= true),但是如果我不指定forceRegenerate,它将不会生成运行时完全没有第二组和第三组类,我的配置是否有问题? jaxb2-maven-插件 maven-ja

  • 对于所有给定的XSD,jaxb2 maven插件不会生成包信息。java文件。(它只生成类)。我们仍然使用Java1.8 我的pom看起来像这样: 有什么想法吗?

  • 我对Jaxb和这个maven-jaxb2插件非常陌生 这是我的. xsd文件: 这是我的。xjb文件: 当它生成时,它给出的java类有点像: 但是我不想为用户和用户列表重复相同的代码,我可以通过注释或定义正则表达式来做什么。请建议一些方法。 我只是想知道这段代码要写什么 因此,当它创建用户类时,它会显示@xmlRootElement(name='user'),而其他类的@xmlRootEleme