generator-maven-plugin基于模板的 Maven 代碼生成器
前言
該生成器是基于mybatis-plus的基礎(chǔ)上根據(jù)個人在實際生產(chǎn)中所遇到過的各種設(shè)計而進行思考擴展的。為了提供更好地擴展性,使用者只需提供自定義的模板即可生成對應(yīng)的文件,也可使用默認(rèn)模板。目前模板語言只支持freemarker,因為作為一個生成工具個人認(rèn)為無需考慮性能與使用哪種模板語言上的問題也沒有對模板這方面進行深究,個人對freemarker也只是略懂(遇到不懂的表達式自己也是百度一下,無需深學(xué)),但也足以作為生成所需。項目地址:[maven版],[依賴類生成版]。通過依賴注入生成的版本之后可能會廢棄,僅供研究。雖然覺得功能已足夠,但還是希望使用者們發(fā)現(xiàn)擴展性強的功能可以提一下建議,采納后會盡快更新版本。
1.功能簡介
目前可選擇的生成器很多,個人目前所接觸過的有tk、mybatis源生、mybatis-plus、jOOQ的生成器,各個項目基本都是基于持久層框架而選擇相應(yīng)的生成器的,這也使得生成器對應(yīng)的持久層框架適配性最好。當(dāng)然,擴展性強的也有,mybatis-plus是個人認(rèn)為以上幾個生成器中擴展性最好的,缺點是需要添加依賴,生成器類無法為每個項目重用,特別是在多模塊項目中修改量較大。以下是個人基于mybatis-plus生成器的功能與個人的思考擴展后集成為maven生成器插件的主要功能:
- 基于數(shù)據(jù)庫字段注釋指定樣式的常量生成(建議一個entity對應(yīng)一個constant,這樣即便負責(zé)不同模塊的負責(zé)人或接手維護者也可迅速定位一個實體的常量維護類,而無需考慮因開發(fā)者因?qū)︻I(lǐng)域的不同理解劃分而增加查找難度,當(dāng)然僅是個人在開發(fā)過程中所遇到的問題)
- 只生成/不生成表名含指定關(guān)鍵字的service、serviceImpl模板文件(基于服務(wù)中的領(lǐng)域耦合可考慮哪些數(shù)據(jù)表無需生成)
- 根據(jù)自定義的freemarker模板生成文件,設(shè)置了(如自定義生成相應(yīng)的Manager層進行業(yè)務(wù)下沉,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: 輸出絕對路徑,默認(rèn)生成到當(dāng)前pom項目模塊的target/generate-sources下
- basePackage: 各層文件生成的基包[**required**]
- isCleanBefore(boolean): 文件生成前是否清空當(dāng)前模塊下的target目錄,默認(rèn)false
- useSwagger(boolean):生成文件是否帶swagger注解,默認(rèn)false
- superEntityClass:entity父類,完整包路徑.類名
- author:模板author值
- dataSource: 數(shù)據(jù)庫配置[**required**]
- url
- username
- password
- driverType:數(shù)據(jù)庫驅(qū)動類型(MYSQL,ORACLE,POSTGRE_SQL)
- templates: 自定義模板配置、模板生成配置,不配置則使用默認(rèn)模板配置生成
- 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: 默認(rèn)true,其它層默認(rèn)false
- customs: 對象列表,自定義模板
- layerName: 模板分層名(請勿使用已存在ftl變量)
- subPackage: 所在子包
- path: 模板在resources下的相對路徑
- exclusions: 字符串?dāng)?shù)組,不生成表名含數(shù)組內(nèi)字符串的所有文件,默認(rèn)空
- inclusions: 字符串?dāng)?shù)組,只生成表名含數(shù)組內(nèi)字符串的所有文件,默認(rèn)空
- upstreamExclusions: 字符串?dāng)?shù)組,不生成表名含數(shù)組內(nèi)字符串的自定義模板、service、serviceImpl、controller文件,默認(rèn)空
- upstreamInclusions: 字符串?dāng)?shù)組,只生成表名含數(shù)組內(nèi)字符串的自定義模板、service、serviceImpl、controller文件,默認(rèn)空
- logicDeleteFieldName: 全局邏輯刪除字段名,默認(rèn)空
- tablePrefix: 字符串?dāng)?shù)組,表名前綴,默認(rèn)空
