模板开发
autoCode.xml
一个autoCode.xml配置文件示例,;
autoCode.xml用于描述该文件夹下所有的模板的 输入路径和输出路径。 一般我们只需要关系 【templates->template 】 XML节点即可,在这里做扩展,其它直接复制稍微修饰即可。
template说明:
- id:模板ID,请保持唯一;
- name: 模板名称,请保持唯一;
- destFile:输出目录;
- templateFile:模板相对路径,相对于模板根目录;
- engine: 可以为 groovy, velocity, jxls(excel模板), freemarker(暂未支持),thymeleaf(暂未支持);
- acceptDataModel: 可接受处理的数据模型: tableModel,json,lineList,cellList,javaSource,rawContent,xml
- description: 模板描述,可以进行介绍;
<?xml version="1.0" encoding="UTF-8" ?>
<autoMake
xmlns="https://cn2oo8.github.io/molicode_doc/schema/autoCode"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://cn2oo8.github.io/molicode_doc/schema/autoCode https://cn2oo8.github.io/molicode_doc/schema/autoCode/autoCode-1.0.xsd">
<moliCodeVersion>1.0.0</moliCodeVersion>
<mavenInfo>
<modelVersion>4.0.0</modelVersion>
<groupId>com.shareyi.molicode</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>autocode-template-selfsdk</artifactId>
<name>moliCode生成自有代码的模板</name>
<description>moliCode生成自有代码的模板</description>
<developers>
<developer>
<name>david</name>
<email>zsb1987@foxmail.com</email>
<organization>www.shareyi.com</organization>
<organizationUrl>www.shareyi.com</organizationUrl>
</developer>
</developers>
</mavenInfo>
<properties>
<!-- 代码片段配置文件,将部分公用的代码抽取出来放置到此处 -->
<property key="snippet.template.path">config/molicode/snippetTemplate.xml</property>
<!-- 用户自定义的配置文件,配置的值以文本方式直接可以在:extendConf.get("") 到-->
<property key="extend.text.config">config/molicode/extendConfig.xml</property>
<!-- 页面依赖资源配置文件(可支持requirejs和 普通引入)-->
<property key="pagerequire.map.config">config/molicode/requireConfig.xml</property>
<!-- 数据库类型到java类型映射-->
<property key="dbtype.javatype.map.config">config/molicode/db2javaTypeMap.xml</property>
<!-- 数据库类型到页面类型映射-->
<property key="dbtype.columntag.map.config">config/molicode/dbType2ColumnTagMap.xml</property>
</properties>
<templates>
<template id="domain" name="domain类"
destFile="/${config.artifactId}-domain/src/main/java/${PubUtils.packageToPath(config.basePackage)}/domain/${PubUtils.packageToPath(config.category)}/${tableDefine.id}.java"
templateFile="templates/domain/domain.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="builder" name="builder类"
destFile="/${config.artifactId}-domain/src/main/java/${PubUtils.packageToPath(config.basePackage)}/builder/impl/${tableDefine.id}Builder.java"
templateFile="templates/domain/builder.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="column" name="column 枚举"
destFile="/${config.artifactId}-common/src/main/java/${PubUtils.packageToPath(config.basePackage)}/common/enums/columns/${tableDefine.id}Column.java"
templateFile="templates/domain/column.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="mybatisDaoIntf" name="dao接口"
destFile="/${config.artifactId}-dao/src/main/java/${PubUtils.packageToPath(config.basePackage)}/dao/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Dao.java"
templateFile="templates/dao/mybatis/daoIntf.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="mybatisMapper" name="mybatisMapper"
destFile="/${config.artifactId}-dao/src/main/resources/mapper/${tableDefine.id}.xml"
templateFile="templates/mapper/mybatis/mapper.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="managerIntf" name="manager 接口"
destFile="/${config.artifactId}-manager/src/main/java/${PubUtils.packageToPath(config.basePackage)}/manager/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Manager.java"
templateFile="templates/manager/managerIntf.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="managerImpl" name="manager接口 实现"
destFile="/${config.artifactId}-manager/src/main/java/${PubUtils.packageToPath(config.basePackage)}/manager/${PubUtils.packageToPath(config.category)}/impl/${tableDefine.id}ManagerImpl.java"
templateFile="templates/manager/managerImpl.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="serviceIntf" name="service SDK 接口"
destFile="/${config.artifactId}-service/src/main/java/${PubUtils.packageToPath(config.basePackage)}/service/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Service.java"
templateFile="templates/sdk/serviceIntf.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="serviceImpl" name="service SDK 接口 实现"
destFile="/${config.artifactId}-service/src/main/java/${PubUtils.packageToPath(config.basePackage)}/service/${PubUtils.packageToPath(config.category)}/impl/${tableDefine.id}ServiceImpl.java"
templateFile="templates/sdk/serviceImpl.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="validator" name="validator SDK验证"
destFile="/${config.artifactId}-service/src/main/java/${PubUtils.packageToPath(config.basePackage)}/validate/provide/${tableDefine.id}Validator.java"
templateFile="templates/sdk/validator.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="controller" name="controller"
destFile="/${config.artifactId}-web/src/main/java/${PubUtils.packageToPath(config.basePackage)}/controller/${PubUtils.packageToPath(config.category)}/${tableDefine.id}Controller.java"
templateFile="templates/controller/controller.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="addPage" name="add页面"
destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/add.vue"
templateFile="templates/vue/add.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="editPage" name="edit页面"
destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/edit.vue"
templateFile="templates/vue/edit.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="listPage" name="list页面"
destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/list.vue"
templateFile="templates/vue/list.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="operatePage" name="operate页面"
destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/operate.vue"
templateFile="templates/vue/operate.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="tableDefineVue" name="tableDefineVue"
destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/tableDefine.js"
templateFile=" templates/vue/tableDefine.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="configVue" name="configVue配置信息"
destFile="/ui-starter/src/views/${PubUtils.packageToPath(config.category)}/${tableNameUtil.lowerCaseFirst(tableDefine.id)}/config.js"
templateFile="templates/vue/config.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
<template id="tableInfo" name="表结构"
destFile="/${config.artifactId}-web/src/main/resources/temp/${tableDefine.id}TableInfo.txt"
templateFile="templates/config/tableInfo.gsp">
<acceptDataModel>tableModel</acceptDataModel>
</template>
</templates>
</autoMake>
代码模板示例
${snippetTemplateUtil.getTemplate('copyrightInfo')}
<%
def tableDefine=tableModel.tableDefine;
def columns=tableDefine.columns;
def pkColumn=tableDefine.getPkColumn();
def upperPkName=tableNameUtil.upperFirst(pkColumn.dataName)
Set excludes = ["id","status","operator","created","modified","concurrentVersion","dataVersion"]
%>package ${config.basePackage}.domain${PubUtils.addStrAfterSeparator(config.category,"." )};
import ${config.basePackage}.domain.BasicDomain;
import java.io.Serializable;
/**
* @author ${config.author}
* @since ${config.nowDate}
* ${tableDefine.cnname} Domain 类
*/
public class ${tableDefine.id} extends BasicDomain implements Serializable {
private static final long serialVersionUID = ${PubUtils.getRandomLong()}L;
<%
columns.each{
if(!excludes.contains(it.dataName)) {
println " /** ${it.cnname} */";
println " private ${tableNameUtil.getDataType(it.columnType)} ${it.dataName}; "
}
};
columns.each{
if(!excludes.contains(it.dataName)) {
String dataName = it.dataName
def upperFistName=tableNameUtil.upperFirst(dataName)
def dataType =tableNameUtil.getDataType(it.columnType)
println """
public void set${upperFistName}(${dataType} ${dataName}) {
this.${dataName}=${dataName};
}
public ${dataType} get${upperFistName}() {
return this.${dataName};
}"""
}
}
%>
}
文件目录说明
新建一个目录, 如 molicode-template-selfsdk然后在该目录下创建 autoCode.xml; 按上面的autoCode.xml配置文件编写内容;
在molicode-template-selfsdk下创建 templates 目录,并组织自己的模板文件,其中:
- *.gsp 为groovy 脚本文件;
- *.vm 为velocity文件;
- *.xlsx 为Excel文件;
新增的文件需要在autoCode.xml中进行描述;如下图 domain.gsp文件在autoCode.xml 可描述为:
<template id="domain" name="domain类"
destFile="/${config.artifactId}-domain/src/main/java/${PubUtils.packageToPath(config.basePackage)}/domain/${PubUtils.packageToPath(config.category)}/${tableDefine.id}.java"
templateFile="templates/domain/domain.gsp" engine="groovy">
<acceptDataModel>tableModel</acceptDataModel>
</template>
pom.xml 文件请忽略,此为使用maven仓库和使用maven工程才需要使用,普通git项目只需要 autoCode.xml 和 模板文件即可。
模板资源存储
我们所有的模板资源,建议托管到git仓库里面,方便大家发布和更新资源。如果是公开的可以推送到public仓库,如果公司内部私有的可以推送到私有仓库。
一个git仓库可以只存储一个模板集合,也可以存储多个:
存储单个的工程实例:https://gitee.com/molicode_repo/molicode-template-elementui
存储多个的工程实例:https://gitee.com/molicode_repo/autocode-template-example
多个的git仓库每个子文件下存储一个模板集合,每个子文件夹下面都有一个autoCode.xml;
特别说明
模板开发请追踪以下链接地址工程: https://gitee.com/molicode_repo/molicode-template-study