模板开发
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: 模板描述,可以进行介绍;
<?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="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};
}"""
}
}
%>
}
文件目录说明
新建一个目录, 如 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 可描述为:
<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仓库,或者本地文件夹也可;告知使用方git地址即可。
开发中遇到任何问题,请及时沟通~~~~