模板开发

autoCode.xml

一个autoCode.xml配置文件示例。template说明:

  • id:模板ID,请保持唯一;
  • name: 模板名称,请保持唯一;
  • destFile:输出目录;
  • templateFile:模板相对路径,相对于模板根目录;
  • engine: 可以为 groovy, velocity, jxls(excel模板), freemarker(暂未支持),thymeleaf(暂未支持);
  • acceptDataModel: 可接受处理的数据模型: tableModel,json,lineList,cellList,javaSource,rawContent,xml
  • description: 模板描述,可以进行介绍;
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <autoMake
  3. xmlns="https://cn2oo8.github.io/molicode_doc/schema/autoCode"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="https://cn2oo8.github.io/molicode_doc/schema/autoCode https://cn2oo8.github.io/molicode_doc/schema/autoCode/autoCode-1.0.xsd">
  6. <moliCodeVersion>1.0.0</moliCodeVersion>
  7. <mavenInfo>
  8. <modelVersion>4.0.0</modelVersion>
  9. <groupId>com.shareyi.molicode</groupId>
  10. <version>1.0-SNAPSHOT</version>
  11. <artifactId>autocode-template-selfsdk</artifactId>
  12. <name>moliCode生成自有代码的模板</name>
  13. <description>moliCode生成自有代码的模板</description>
  14. <developers>
  15. <developer>
  16. <name>david</name>
  17. <email>zsb1987@foxmail.com</email>
  18. <organization>www.shareyi.com</organization>
  19. <organizationUrl>www.shareyi.com</organizationUrl>
  20. </developer>
  21. </developers>
  22. </mavenInfo>
  23. <properties>
  24. <!-- 代码片段配置文件,将部分公用的代码抽取出来放置到此处 -->
  25. <property key="snippet.template.path">config/molicode/snippetTemplate.xml</property>
  26. <!-- 用户自定义的配置文件,配置的值以文本方式直接可以在:extendConf.get("") 到-->
  27. <property key="extend.text.config">config/molicode/extendConfig.xml</property>
  28. <!-- 页面依赖资源配置文件(可支持requirejs和 普通引入)-->
  29. <property key="pagerequire.map.config">config/molicode/requireConfig.xml</property>
  30. <!-- 数据库类型到java类型映射-->
  31. <property key="dbtype.javatype.map.config">config/molicode/db2javaTypeMap.xml</property>
  32. <!-- 数据库类型到页面类型映射-->
  33. <property key="dbtype.columntag.map.config">config/molicode/dbType2ColumnTagMap.xml</property>
  34. </properties>
  35. <templates>
  36. <template id="domain" name="domain类"
  37. destFile="/${config.artifactId}-domain/src/main/java/${PubUtils.packageToPath(config.basePackage)}/domain/${PubUtils.packageToPath(config.category)}/${tableDefine.id}.java"
  38. templateFile="templates/domain/domain.gsp" engine="groovy">
  39. <acceptDataModel>tableModel</acceptDataModel>
  40. </template>
  41. <template id="builder" name="builder类"
  42. destFile="/${config.artifactId}-domain/src/main/java/${PubUtils.packageToPath(config.basePackage)}/builder/impl/${tableDefine.id}Builder.java"
  43. templateFile="templates/domain/builder.gsp" engine="groovy">
  44. <acceptDataModel>tableModel</acceptDataModel>
  45. </template>
  46. <template id="column" name="column 枚举"
  47. destFile="/${config.artifactId}-common/src/main/java/${PubUtils.packageToPath(config.basePackage)}/common/enums/columns/${tableDefine.id}Column.java"
  48. templateFile="templates/domain/column.gsp" engine="groovy">
  49. <acceptDataModel>tableModel</acceptDataModel>
  50. </template>
  51. <template id="mybatisDaoIntf" name="dao接口"
  52. destFile="${config.artifactId}-dao/src/main/java/${PubUtils.packageToPath(config.basePackage)}/dao/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Dao.java"
  53. templateFile="templates/dao/mybatis/daoIntf.gsp" engine="groovy">
  54. <acceptDataModel>tableModel</acceptDataModel>
  55. </template>
  56. <template id="mybatisMapper" name="mybatisMapper"
  57. destFile="${config.artifactId}-dao/src/main/resources/mapper/${tableDefine.id}.xml"
  58. templateFile="templates/mapper/mybatis/mapper.gsp" engine="groovy">
  59. <acceptDataModel>tableModel</acceptDataModel>
  60. </template>
  61. <template id="managerIntf" name="manager 接口"
  62. destFile="/${config.artifactId}-manager/src/main/java/${PubUtils.packageToPath(config.basePackage)}/manager/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Manager.java"
  63. templateFile="templates/manager/managerIntf.gsp" engine="groovy">
  64. <acceptDataModel>tableModel</acceptDataModel>
  65. </template>
  66. <template id="managerImpl" name="manager接口 实现"
  67. destFile="/${config.artifactId}-manager/src/main/java/${PubUtils.packageToPath(config.basePackage)}/manager/${PubUtils.packageToPath(config.category)}/impl/${tableDefine.id}ManagerImpl.java"
  68. templateFile="templates/manager/managerImpl.gsp" engine="groovy">
  69. <acceptDataModel>tableModel</acceptDataModel>
  70. </template>
  71. <template id="serviceIntf" name="service SDK 接口"
  72. destFile="/${config.artifactId}-service/src/main/java/${PubUtils.packageToPath(config.basePackage)}/service/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Service.java"
  73. templateFile="templates/sdk/serviceIntf.gsp" engine="groovy">
  74. <acceptDataModel>tableModel</acceptDataModel>
  75. </template>
  76. <template id="serviceImpl" name="service SDK 接口 实现"
  77. destFile="/${config.artifactId}-service/src/main/java/${PubUtils.packageToPath(config.basePackage)}/service/${PubUtils.packageToPath(config.category)}/impl/${tableDefine.id}ServiceImpl.java"
  78. templateFile="templates/sdk/serviceImpl.gsp" engine="groovy">
  79. <acceptDataModel>tableModel</acceptDataModel>
  80. </template>
  81. <template id="validator" name="validator SDK验证"
  82. destFile="/${config.artifactId}-service/src/main/java/${PubUtils.packageToPath(config.basePackage)}/validate/provide/${tableDefine.id}Validator.java"
  83. templateFile="templates/sdk/validator.gsp">
  84. <acceptDataModel>tableModel</acceptDataModel>
  85. </template>
  86. <template id="controller" name="controller"
  87. destFile="/${config.artifactId}-web/src/main/java/${PubUtils.packageToPath(config.basePackage)}/controller/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Controller.java"
  88. templateFile="templates/controller/controller.gsp">
  89. <acceptDataModel>tableModel</acceptDataModel>
  90. </template>
  91. <template id="addPage" name="add页面"
  92. destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/add.vue"
  93. templateFile="templates/vue/add.gsp">
  94. <acceptDataModel>tableModel</acceptDataModel>
  95. </template>
  96. <template id="editPage" name="edit页面"
  97. destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/edit.vue"
  98. templateFile="templates/vue/edit.gsp">
  99. <acceptDataModel>tableModel</acceptDataModel>
  100. </template>
  101. <template id="listPage" name="list页面"
  102. destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/list.vue"
  103. templateFile="templates/vue/list.gsp">
  104. <acceptDataModel>tableModel</acceptDataModel>
  105. </template>
  106. <template id="operatePage" name="operate页面"
  107. destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/operate.vue"
  108. templateFile="templates/vue/operate.gsp">
  109. <acceptDataModel>tableModel</acceptDataModel>
  110. </template>
  111. <template id="tableDefineVue" name="tableDefineVue"
  112. destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/tableDefine.js"
  113. templateFile=" templates/vue/tableDefine.gsp">
  114. <acceptDataModel>tableModel</acceptDataModel>
  115. </template>
  116. <template id="tableInfo" name="表结构"
  117. destFile="/${config.artifactId}-web/src/main/resources/temp/${tableDefine.id}TableInfo.txt"
  118. templateFile="templates/config/tableInfo.gsp">
  119. <acceptDataModel>tableModel</acceptDataModel>
  120. </template>
  121. </templates>
  122. </autoMake>

代码模板示例

  1. ${snippetTemplateUtil.getTemplate('copyrightInfo')}
  2. <%
  3. def tableDefine=tableModel.tableDefine;
  4. def columns=tableDefine.columns;
  5. def pkColumn=tableDefine.getPkColumn();
  6. def upperPkName=tableNameUtil.upperFirst(pkColumn.dataName)
  7. Set excludes = ["id","status","operator","created","modified","concurrentVersion","dataVersion"]
  8. %>package ${config.basePackage}.domain${PubUtils.addStrAfterSeparator(config.category,"." )};
  9. import ${config.basePackage}.domain.BasicDomain;
  10. import java.io.Serializable;
  11. /**
  12. * @author ${config.author}
  13. * @since ${config.nowDate}
  14. * ${tableDefine.cnname} Domain 类
  15. */
  16. public class ${tableDefine.id} extends BasicDomain implements Serializable {
  17. private static final long serialVersionUID = ${PubUtils.getRandomLong()}L;
  18. <%
  19. columns.each{
  20. if(!excludes.contains(it.dataName)) {
  21. println " /** ${it.cnname} */";
  22. println " private ${tableNameUtil.getDataType(it.columnType)} ${it.dataName}; "
  23. }
  24. };
  25. columns.each{
  26. if(!excludes.contains(it.dataName)) {
  27. String dataName = it.dataName
  28. def upperFistName=tableNameUtil.upperFirst(dataName)
  29. def dataType =tableNameUtil.getDataType(it.columnType)
  30. println """
  31. public void set${upperFistName}(${dataType} ${dataName}) {
  32. this.${dataName}=${dataName};
  33. }
  34. public ${dataType} get${upperFistName}() {
  35. return this.${dataName};
  36. }"""
  37. }
  38. }
  39. %>
  40. }

文件目录说明

新建一个目录, 如 src/main/java/resources(我是为了配合截图所以起这么长的文件目录名,你可以直接起一个 myTemplate即可)然后在该目录下创建 autoCode.xml;按上面的autoCode.xml配置文件编写内容;

在src/main/resources (我是为了配合截图所以起这么长的文件目录名,你可以直接在myTemplate文件夹下即可)下创建 templates 目录,并组织自己的模板文件,其中:

  • *.gsp 为groovy 脚本文件;
  • *.vm 为velocity文件;
  • *.xlsx 为Excel文件;
    新增的文件需要在autoCode.xml中进行描述;如下图 domain.gsp文件在autoCode.xml 可描述为:
  1. <template id="domain" name="domain类"
  2. destFile="/${config.artifactId}-domain/src/main/java/${PubUtils.packageToPath(config.basePackage)}/domain/${PubUtils.packageToPath(config.category)}/${tableDefine.id}.java"
  3. templateFile="templates/domain/domain.gsp" engine="groovy">
  4. <acceptDataModel>tableModel</acceptDataModel>
  5. </template>

dir

pom.xml 文件请忽略,此为使用maven仓库和使用maven工程才需要使用,普通git项目只需要 autoCode.xml 和 模板文件即可。

发布和使用

请推送到git仓库,或者本地文件夹也可;告知使用方git地址即可。

开发中遇到任何问题,请及时沟通~~~~