官方网站:http://pdmaas.pdmaner.com/
文章参考:https://zhuanlan.zhihu.com/p/499897001
1、代码生成模版配置:
代码模板引擎基于doT.js构建,如下图:
编辑代码生成模版:
初始代码:
entity:
{{ var today=new Date();
var fullYear=today.getFullYear();
var month=today.getMonth() + 1;
var days=today.getDate();
var pkVarName = "undefinedId";
var pkDataType = "String";
it.entity.fields.forEach(function(field){
if(field.primaryKey){
pkVarName = it.func.camel(field.defKey,false);
pkDataType = field["type"];
return;
}
});
var pkgName = it.entity.env.base.nameSpace;
var beanClass = it.entity.env.base.codeRoot;
var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
var serviceClass = beanClass+'Service';
var serviceVarName= beanVarName+'Service';
}}package {{=pkgName}}.entity;
$blankline
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
$blankline
/**
* {{=it.entity.defName}};{{=it.entity.comment}}
* @author : http://www.chiner.pro
* @date : {{=fullYear}}-{{=month}}-{{=days}}
*/
@ApiModel(value = "{{=it.entity.defName}}",description = "{{=it.entity.comment}}")
public class {{=beanClass}} implements Serializable,Cloneable{
{{~it.entity.fields:field:index}}
/** {{=it.func.join(field.defName,field.comment,';')}} */
@ApiModelProperty(name = "{{=field.defName}}",notes = "{{=field.comment}}")
private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;
{{~}}
$blankline
{{~it.entity.fields:field:index}}
/** {{=it.func.join(field.defName,field.comment,';')}} */
public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){
return this.{{=it.func.camel(field.defKey,false)}};
}
/** {{=it.func.join(field.defName,field.comment,';')}} */
public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){
this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};
}
{{~}}
}
Mapper.xml:
{{ var today=new Date();
var fullYear=today.getFullYear();
var month=today.getMonth() + 1;
var days=today.getDate();
var pkVarName = "undefinedId";
var pkDataType = "String";
var pkField = "UNDEFINED_ID";
it.entity.fields.forEach(function(field){
if(field.primaryKey){
pkField = field.defKey;
pkVarName = it.func.camel(field.defKey,false);
pkDataType = field["type"];
return;
}
});
var pkgName = it.entity.env.base.nameSpace;
var beanClass = it.entity.env.base.codeRoot;
var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
var serviceClass = beanClass+'Service';
var serviceVarName= beanVarName+'Service';
}}<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="{{=pkgName}}.mapper.{{=beanClass}}Mapper">
<resultMap type="{{=pkgName}}.entity.{{=beanClass}}" id="{{=beanClass}}Map">
{{~it.entity.fields:field:index}}
<result property="{{=it.func.camel(field.defKey,false)}}" column="{{=field.defKey}}" jdbcType="{{=field.type}}"/>
{{~}}
</resultMap>
$blankline
<!-- 通过ID查询单条数据 -->
<select id="queryById" resultMap="{{=beanClass}}Map">
select
{{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}}
from {{=it.entity.defKey}}
where {{=pkField}} = #{{{=pkVarName}}}
</select>
$blankline
<!--分页查询指定行数据-->
<select id="queryAllByLimit" resultMap="{{=beanClass}}Map">
select
{{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}}
from {{=it.entity.defKey}}
<where>
{{~it.entity.fields:field:index}}
<if test="{{=it.func.camel(field.defKey,false)}} != null and {{=it.func.camel(field.defKey,false)}} != ''">
and {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}}
</if>
{{~}}
</where>
limit #{pageable.offset}, #{pageable.pageSize}
</select>
$blankline
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from {{=it.entity.defKey}}
<where>
{{~it.entity.fields:field:index}}
<if test="{{=it.func.camel(field.defKey,false)}} != null and {{=it.func.camel(field.defKey,false)}} != ''">
and {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}}
</if>
{{~}}
</where>
</select>
$blankline
<!--新增数据-->
<insert id="insert" keyProperty="{{=pkField}}" useGeneratedKeys="true">
insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})
values ({{=it.entity.fields.map(function(e,i){return '#{'+it.func.camel(e.defKey,false)+'}'}).join(',')}})
</insert>
$blankline
<!-- 批量新增数据 -->
<insert id="insertBatch" keyProperty="{{=pkField}}" useGeneratedKeys="true">
insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})
values
<foreach collection="entities" item="entity" separator=",">
({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})
</foreach>
</insert>
$blankline
<!-- 批量新增或按主键更新数据 -->
<insert id="insertOrUpdateBatch" keyProperty="{{=pkField}}" useGeneratedKeys="true">
insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})
values
<foreach collection="entities" item="entity" separator=",">
({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})
</foreach>
on duplicate key update
{{=it.entity.fields.map(function(e,i){return e.defKey + '=values('+e.defKey+')'}).join(',\n\t\t')}}
</insert>
$blankline
<!-- 更新数据 -->
<update id="update">
update {{=it.entity.defKey}}
<set>
{{~it.entity.fields:field:index}}
<if test="{{=it.func.camel(field.defKey,false)}} != null and {{=it.func.camel(field.defKey,false)}} != ''">
{{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}},
</if>
{{~}}
</set>
where {{=pkField}} = #{{{=pkVarName}}}
</update>
$blankline
<!--通过主键删除-->
<delete id="deleteById">
delete from {{=it.entity.defKey}} where {{=pkField}} = #{{{=pkVarName}}}
</delete>
</mapper>
Mapper:
{{ var today=new Date();
var fullYear=today.getFullYear();
var month=today.getMonth() + 1;
var days=today.getDate();
var pkVarName = "undefinedId";
var pkDataType = "String";
it.entity.fields.forEach(function(field){
if(field.primaryKey){
pkVarName = it.func.camel(field.defKey,false);
pkDataType = field["type"];
return;
}
});
var pkgName = it.entity.env.base.nameSpace;
var beanClass = it.entity.env.base.codeRoot;
var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
var serviceClass = beanClass+'Service';
var serviceVarName= beanVarName+'Service';
}}package {{=pkgName}}.mapper;
$blankline
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import {{=pkgName}}.entity.{{=beanClass}};
$blankline
/**
* {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层
* @author : http://www.chiner.pro
* @date : {{=fullYear}}-{{=month}}-{{=days}}
*/
@Mapper
public interface {{=beanClass}}Mapper{
/**
* 通过ID查询单条数据
*
* @param {{=pkVarName}} 主键
* @return 实例对象
*/
{{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});
/**
* 分页查询指定行数据
*
* @param {{=beanVarName}} 查询条件
* @param pageable 分页对象
* @return 对象列表
*/
List<{{=beanClass}}> queryAllByLimit({{=beanClass}} {{=beanVarName}}, @Param("pageable") Pageable pageable);
/**
* 统计总行数
*
* @param {{=beanVarName}} 查询条件
* @return 总行数
*/
long count({{=beanClass}} {{=beanVarName}});
/**
* 新增数据
*
* @param {{=beanVarName}} 实例对象
* @return 影响行数
*/
int insert({{=beanClass}} {{=beanVarName}});
/**
* 批量新增数据
*
* @param entities List<{{=beanClass}}> 实例对象列表
* @return 影响行数
*/
int insertBatch(@Param("entities") List<{{=beanClass}}> entities);
/**
* 批量新增或按主键更新数据
*
* @param entities List<{{=beanClass}}> 实例对象列表
* @return 影响行数
*/
int insertOrUpdateBatch(@Param("entities") List<{{=beanClass}}> entities);
/**
* 更新数据
*
* @param {{=beanVarName}} 实例对象
* @return 影响行数
*/
int update({{=beanClass}} {{=beanVarName}});
/**
* 通过主键删除数据
*
* @param {{=pkVarName}} 主键
* @return 影响行数
*/
int deleteById({{=pkDataType}} {{=pkVarName}});
}
ServiceImpl:
{{ var today=new Date();
var fullYear=today.getFullYear();
var month=today.getMonth() + 1;
var days=today.getDate();
var pkVarName = "undefinedId";
var pkVarNameU = "UndefinedId";
var pkDataType = "String";
it.entity.fields.forEach(function(field){
if(field.primaryKey){
pkVarName = it.func.camel(field.defKey,false);
pkVarNameU = it.func.camel(field.defKey,true);
pkDataType = field["type"];
return;
}
});
var pkgName = it.entity.env.base.nameSpace;
var beanClass = it.entity.env.base.codeRoot;
var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
var serviceClass = beanClass+'Service';
var serviceVarName= beanVarName+'Service';
var mapperName = beanVarName+'Mapper';
}}package {{=pkgName}}.service.impl;
$blankline
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import {{=pkgName}}.entity.{{=beanClass}};
import {{=pkgName}}.mapper.{{=beanClass}}Mapper;
import {{=pkgName}}.service.{{=serviceClass}};
/**
* {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类
* @author : http://www.chiner.pro
* @date : {{=fullYear}}-{{=month}}-{{=days}}
*/
@Service
public class {{=serviceClass}}Impl implements {{=serviceClass}}{
@Autowired
private {{=beanClass}}Mapper {{=mapperName}};
$blankline
/**
* 通过ID查询单条数据
*
* @param {{=pkVarName}} 主键
* @return 实例对象
*/
public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){
return {{=mapperName}}.queryById({{=pkVarName}});
}
$blankline
/**
* 分页查询
*
* @param {{=beanVarName}} 筛选条件
* @param pageRequest 分页对象
* @return 查询结果
*/
public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){
long total = {{=mapperName}}.count({{=beanVarName}});
return new PageImpl<>({{=mapperName}}.queryAllByLimit({{=beanVarName}}, pageRequest), pageRequest, total);
}
$blankline
/**
* 新增数据
*
* @param {{=beanVarName}} 实例对象
* @return 实例对象
*/
public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){
{{=mapperName}}.insert({{=beanVarName}});
return {{=beanVarName}};
}
$blankline
/**
* 更新数据
*
* @param {{=beanVarName}} 实例对象
* @return 实例对象
*/
public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){
{{=mapperName}}.update({{=beanVarName}});
return queryById({{=beanVarName}}.get{{=pkVarNameU}}());
}
$blankline
/**
* 通过主键删除数据
*
* @param {{=pkVarName}} 主键
* @return 是否成功
*/
public boolean deleteById({{=pkDataType}} {{=pkVarName}}){
int total = {{=mapperName}}.deleteById({{=pkVarName}});
return total > 0;
}
}
Service
{{ var today=new Date();
var fullYear=today.getFullYear();
var month=today.getMonth() + 1;
var days=today.getDate();
var pkVarName = "undefinedId";
var pkDataType = "String";
it.entity.fields.forEach(function(field){
if(field.primaryKey){
pkVarName = it.func.camel(field.defKey,false);
pkDataType = field["type"];
return;
}
});
var pkgName = it.entity.env.base.nameSpace;
var beanClass = it.entity.env.base.codeRoot;
var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
var serviceClass = beanClass+'Service';
var serviceVarName= beanVarName+'Service';
}}package {{=pkgName}}.service;
$blankline
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import {{=pkgName}}.entity.{{=beanClass}};
$blankline
/**
* {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口
* @author : http://www.chiner.pro
* @date : {{=fullYear}}-{{=month}}-{{=days}}
*/
public interface {{=serviceClass}}{
/**
* 通过ID查询单条数据
*
* @param {{=pkVarName}} 主键
* @return 实例对象
*/
{{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});
/**
* 分页查询
*
* @param {{=beanVarName}} 筛选条件
* @param pageRequest 分页对象
* @return 查询结果
*/
Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest);
/**
* 新增数据
*
* @param {{=beanVarName}} 实例对象
* @return 实例对象
*/
{{=beanClass}} insert({{=beanClass}} {{=beanVarName}});
/**
* 更新数据
*
* @param {{=beanVarName}} 实例对象
* @return 实例对象
*/
{{=beanClass}} update({{=beanClass}} {{=beanVarName}});
/**
* 通过主键删除数据
*
* @param {{=pkVarName}} 主键
* @return 是否成功
*/
boolean deleteById({{=pkDataType}} {{=pkVarName}});
}
controller:
{{ var today=new Date();
var fullYear=today.getFullYear();
var month=today.getMonth() + 1;
var days=today.getDate();
var pkVarName = "undefinedId";
var pkDataType = "String";
it.entity.fields.forEach(function(field){
if(field.primaryKey){
pkVarName = it.func.camel(field.defKey,false);
pkDataType = field["type"];
return;
}
});
var pkgName = it.entity.env.base.nameSpace;
var beanClass = it.entity.env.base.codeRoot;
var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);
var serviceClass = beanClass+'Service';
var serviceVarName= beanVarName+'Service';
}}package {{=pkgName}}.controller;
$blankline
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import {{=pkgName}}.entity.{{=beanClass}};
import {{=pkgName}}.service.{{=serviceClass}};
$blankline
/**
* {{=it.entity.defName}};({{=it.entity.defKey}})表控制层
* @author : http://www.chiner.pro
* @date : {{=fullYear}}-{{=month}}-{{=days}}
*/
@Api(tags = "{{=it.entity.defName}}对象功能接口")
@RestController
@RequestMapping("/{{=it.func.camel(it.entity.defKey,false)}}")
public class {{=beanClass}}Controller{
@Autowired
private {{=serviceClass}} {{=serviceVarName}};
$blankline
/**
* 通过ID查询单条数据
*
* @param {{=pkVarName}} 主键
* @return 实例对象
*/
@ApiOperation("通过ID查询单条数据")
@GetMapping("{{{=it.func.camel(pkVarName,false)}}}")
public ResponseEntity<{{=beanClass}}> queryById({{=pkDataType}} {{=pkVarName}}){
return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));
}
$blankline
/**
* 分页查询
*
* @param {{=beanVarName}} 筛选条件
* @param pageRequest 分页对象
* @return 查询结果
*/
@ApiOperation("分页查询")
@GetMapping
public ResponseEntity<Page<{{=beanClass}}>> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){
return ResponseEntity.ok({{=serviceVarName}}.paginQuery({{=beanVarName}}, pageRequest));
}
$blankline
/**
* 新增数据
*
* @param {{=beanVarName}} 实例对象
* @return 实例对象
*/
@ApiOperation("新增数据")
@PostMapping
public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){
return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));
}
$blankline
/**
* 更新数据
*
* @param {{=beanVarName}} 实例对象
* @return 实例对象
*/
@ApiOperation("更新数据")
@PutMapping
public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){
return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));
}
$blankline
/**
* 通过主键删除数据
*
* @param {{=pkVarName}} 主键
* @return 是否成功
*/
@ApiOperation("通过主键删除数据")
@DeleteMapping
public ResponseEntity<Boolean> deleteById({{=pkDataType}} {{=pkVarName}}){
return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));
}
}