1.新建项目导入jar包:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<!-- 数据源连接包(根据具体需要),这里用mysql8-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
2.配置类:
package com.test;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class TemplateParam {
public static String templatesDir = "";//模板所在的相对
private String packageName;//包名
private String tableAnnotation = ""; // 模型描述
private String author = "";//作者
private String url = "";//数据库连接地址
private String username = "";//账号
private String password = "";//密码
private String driver = "";//数据库引擎
private String entityFilePath;//实体生成的绝对路径
private String entityRequestPath;//实体请求类生成的绝对路径
private String entityResponsePath;//实体返回的绝对路径
private String controllerPath;//前端控制器生成的绝对路径
private String serviceImplPath;//逻辑层的绝对路径
private String serviceInterfacePath;//逻辑层接口生成的绝对路径
private String MapperPath;//数据库交互层的绝对路径
private String mapperXmlPath;//实体生成的绝对路径
private String entityFileTemplate = "Entity.ftl";//实体生成的模板名
private String entityRequestTemplate = "EntityRequest.ftl";//实体请求类生成的模板名
private String entityResponseTemplate = "EntityResponse.ftl";//实体返回的模板名
private String controllerTemplate = "Controller.ftl";//前端控制器生成的模板名
private String serviceImplTemplate = "ServiceImpl.ftl";//逻辑层的模板名
private String serviceInterfaceTemplate = "Service.ftl";//逻辑层接口的模板名
private String MapperTemplate = "Mapper.ftl";//数据库交互层的模板名
private String mapperXmlTemplate = "MapperXml.ftl";//实体生成的模板名
public TemplateParam(String itemName) {
this.setParam(itemName);
}
public void setParam(String itemName) {
switch (itemName.toLowerCase()) {
//项目代码生成参数配置
case "test-templates":
templatesDir = "/test-templates";
packageName = "cn.xxx.xxx";
url = "jdbc:mysql://localhost:3306/test?useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=UTC";
author = "Administrator";
username = "root";
password = "root";
driver = "com.mysql.cj.jdbc.Driver";
entityFilePath = "D:\\java\\test\\test-common\\src\\main\\java\\cn\\vpclub\\villiage\\economy\\entity";
entityRequestPath = "D:\\java\\test\\test-common\\src\\main\\java\\cn\\vpclub\\villiage\\economy\\request";
entityResponsePath = "D:\\java\\test\\test-common\\src\\main\\java\\cn\\vpclub\\villiage\\economy\\response";
controllerPath = "D:\\java\\test\\test-service\\src\\main\\java\\cn\\vpclub\\villiage\\economy\\approval\\controller";
serviceImplPath = "D:\\java\\test\\test-service\\src\\main\\java\\cn\\vpclub\\villiage\\economy\\approval\\service\\impl";
serviceInterfacePath = "D:\\java\\test\\test-service\\src\\main\\java\\cn\\vpclub\\villiage\\economy\\approval\\service";
MapperPath = "D:\\java\\test\\test-service\\src\\main\\java\\cn\\vpclub\\villiage\\economy\\approval\\mapper";
mapperXmlPath = "D:\\java\\test\\test-service\\src\\main\\resources\\mapper";
default:
break;
}
}
}
3.FreeMarkerTemplateUtils
package com.test;
import java.io.IOException;
import com.test.enums.TemplateParam;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.NullCacheStorage;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
public class FreeMarkerTemplateUtils {
private FreeMarkerTemplateUtils(){}
private static final Configuration CONFIGURATION = new Configuration(Configuration.VERSION_2_3_22);
static{
CONFIGURATION.setTemplateLoader(new ClassTemplateLoader(FreeMarkerTemplateUtils.class, TemplateParam.templatesDir));//指定模板路径
CONFIGURATION.setDefaultEncoding("UTF-8");
CONFIGURATION.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
CONFIGURATION.setCacheStorage(NullCacheStorage.INSTANCE);
}
public static Template getTemplate(String templateName) throws IOException {
try {
return CONFIGURATION.getTemplate(templateName);
} catch (IOException e) {
throw e;
}
}
public static void clearCache() {
CONFIGURATION.clearTemplateCache();
}
}
4.代码生成逻辑工具类:
package com.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import com.test.TemplateParam;
import freemarker.template.Template;
import com.test.ColumnClass;
/**
* @author Administrator
* @Description 代码生成工具类型 生成控制层和业务层以及数据交互层
* 使用时先配置templateParam,然后输入tableName(表名),changeTableName(表名驼峰命名)
*/
public class CodeGenerateUtils {
private static String tableName = "test"; //小写
private static String changeTableName = "Test"; // 实体类名称
private static String table = tableName; // 实体类名称
private static String tableAnnotation = ""; // 模型描述(默认数据库表注释)
private TemplateParam templateParam = new TemplateParam("test-templates");
private final String CURRENT_DATE = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
private final String AUTHOR = templateParam.getAuthor();//作者
private final String packageName = templateParam.getPackageName();//包名
private final String URL = templateParam.getUrl();//数据库连接属性
private final String USER = templateParam.getUsername();//用户名
private final String PASSWORD = templateParam.getPassword();//密码
private final String DRIVER = templateParam.getDriver();//mysql或pgsql
private String entityFilePath = templateParam.getEntityFilePath();//实体生成的绝对路径
private String entityRequestPath = templateParam.getEntityRequestPath();//实体请求类生成的绝对路径
private String entityResponsePath = templateParam.getEntityResponsePath();//实体返回的绝对路径
private String controllerPath = templateParam.getControllerPath();//前端控制器生成的绝对路径
private String serviceImplPath = templateParam.getServiceImplPath();//逻辑层的绝对路径
private String serviceInterfacePath = templateParam.getServiceInterfacePath();//逻辑层接口生成的绝对路径
private String MapperPath = templateParam.getMapperPath();//数据库交互层的绝对路径
private String mapperXmlPath = templateParam.getMapperXmlPath();//实体生成的绝对路径
private String entityFileTemplate = templateParam.getEntityFileTemplate();//实体生成的模板名称
private String entityRequestTemplate = templateParam.getEntityRequestTemplate();//实体请求类生成的模板名称
private String entityResponseTemplate = templateParam.getEntityResponseTemplate();//实体返回的模板名称
private String controllerTemplate = templateParam.getControllerTemplate();//前端控制器生成的模板名称
private String serviceImplTemplate = templateParam.getServiceImplTemplate();//逻辑层的模板名称
private String serviceInterfaceTemplate = templateParam.getServiceInterfaceTemplate();//逻辑层接口生成的模板名称
private String MapperTemplate = templateParam.getMapperTemplate();//数据库交互层的模板名称
private String mapperXmlTemplate = templateParam.getMapperXmlTemplate();//实体生成的模板名称
public static void main(String[] args) throws Exception{
List<String> tables = new ArrayList<String>();
tables.add(tableName);
CodeGenerateUtils codeGenerateUtils = new CodeGenerateUtils();
codeGenerateUtils.generate(tables);
}
public Connection getConnection() throws Exception{
Class.forName(DRIVER);
Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
return connection;
}
public void generate(List<String> tables) throws Exception{
Map<String,String> map = new HashMap<String,String>(); // 存放表名称和表注释
//没有指定表名 则生成数据库中所有表
if(tables.size() < 1){
tables = getAllTableName();
}
map = getCommentByTableName(tables);
// 连接数据库
Connection connection = getConnection();
for (Map.Entry<String, String> m : map.entrySet()) {
String table = m.getKey();
changeTableName = replaceUnderLineAndUpperCase(table);
tableName = StringUtils.uncapitalize(changeTableName);
tableAnnotation = m.getValue();
DatabaseMetaData databaseMetaData = connection.getMetaData();
//1、生成实体文件 (覆盖MybatisGenerator类中生成的实体文件)
ResultSet resultSet = databaseMetaData.getColumns(null,"%", table,"%");
generateEntityFile(resultSet,changeTableName);
//2、生成实体请求文件
ResultSet resultSetRequest = databaseMetaData.getColumns(null,"%", table,"%");
generateEntityRequestFile(resultSetRequest,changeTableName);
//3、生成实体响应文件
ResultSet resultSetResponse = databaseMetaData.getColumns(null,"%", table,"%");
generateEntityResponseFile(resultSetResponse,changeTableName);
//生成Mapper
generateMapperFile(changeTableName);
//生成Mapper.xml(需要再生成)
generateMapperXmlFile(changeTableName);
//5、生成服务层接口文件
generateServiceInterfaceFile(changeTableName);
//6、生成服务实现层文件
generateServiceImplFile(changeTableName);
//7、生成Controller层文件
generateControllerFile(changeTableName);
resultSet.close();
resultSetRequest.close();
resultSetResponse.close();
}
// connection.close();
/*
*/
}
/**
* 获取当前数据库下的所有表名称
* @return
* @throws Exception
*/
public List<String> getAllTableName() throws Exception {
List<String> tables = new ArrayList();
Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = null;
rs = stmt.executeQuery("SHOW TABLES ");
while (rs.next()) {
String tableName = rs.getString(1);
tables.add(tableName);
}
rs.close();
stmt.close();
conn.close();
return tables;
}
/**
* 获得某表的建表语句
* @param tableName
* @return
* @throws Exception
*/
public Map<String,String> getCommentByTableName(List tableName) throws Exception {
Map<String,String> map = new HashMap();
Connection conn = getConnection();
Statement stmt = conn.createStatement();
for (int i = 0; i < tableName.size(); i++) {
String table = (String) tableName.get(i);
ResultSet rs = stmt.executeQuery("SHOW CREATE TABLE " + table);
if (rs != null && rs.next()) {
String createDDL = rs.getString(2);
String comment = parse(createDDL);
map.put(table, comment);
}
rs.close();
}
stmt.close();
conn.close();
return map;
}
/**
* 返回注释信息
* @param all
* @return
*/
public static String parse(String all) {
String comment = null;
int index = all.indexOf("COMMENT='");
if (index < 0) {
return "";
}
comment = all.substring(index + 9);
comment = comment.substring(0, comment.length() - 1);
return comment;
}
public String replaceUnderLineAndUpperCase(String str){
StringBuffer sb = new StringBuffer();
sb.append(str);
int count = sb.indexOf("_");
while(count!=0){
int num = sb.indexOf("_",count);
count = num + 1;
if(num != -1){
char ss = sb.charAt(count);
char ia = (char) (ss - 32);
sb.replace(count , count + 1,ia + "");
}
}
String result = sb.toString().replaceAll("_","");
return StringUtils.capitalize(result);
}
/**
* 生成实体文件
* @param resultSet
* @throws Exception
*/
private void generateEntityFile(ResultSet resultSet,String entityName) throws Exception{
final String suffix = ".java";
final String path = entityFilePath + "\\"+ entityName + suffix;
final String templateName = entityFileTemplate;
File mapperFile = new File(path);
List<ColumnClass> columnClassList = new ArrayList<ColumnClass>();
ColumnClass columnClass = null;
while(resultSet.next()){
columnClass = new ColumnClass();
//获取字段名称
columnClass.setColumnName(resultSet.getString("COLUMN_NAME"));
//获取字段类型
columnClass.setColumnType(resultSet.getString("TYPE_NAME"));
//转换字段名称,如 sys_name 变成 SysName
columnClass.setChangeColumnName(replaceUnderLineAndUpperCase(resultSet.getString("COLUMN_NAME")));
//字段在数据库的注释
columnClass.setColumnComment(resultSet.getString("REMARKS"));
columnClassList.add(columnClass);
}
Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("model_column",columnClassList);
generateFileByTemplate(templateName,mapperFile,dataMap);
}
/**
* 生成实体请求文件
* @param resultSet
* @throws Exception
*/
private void generateEntityRequestFile(ResultSet resultSet,String entityName) throws Exception{
final String suffix = "Request.java";
final String path = entityRequestPath + "\\" + entityName + suffix;
final String templateName = entityRequestTemplate;
File mapperFile = new File(path);
List<ColumnClass> columnClassList = new ArrayList<ColumnClass>();
ColumnClass columnClass = null;
while(resultSet.next()){
columnClass = new ColumnClass();
//获取字段名称
columnClass.setColumnName(resultSet.getString("COLUMN_NAME"));
//获取字段类型
columnClass.setColumnType(resultSet.getString("TYPE_NAME"));
//转换字段名称,如 sys_name 变成 SysName
columnClass.setChangeColumnName(replaceUnderLineAndUpperCase(resultSet.getString("COLUMN_NAME")));
//字段在数据库的注释
columnClass.setColumnComment(resultSet.getString("REMARKS"));
columnClassList.add(columnClass);
}
Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("model_column",columnClassList);
generateFileByTemplate(templateName,mapperFile,dataMap);
}
/**
* 生成实体返回文件
* @param resultSet
* @throws Exception
*/
private void generateEntityResponseFile(ResultSet resultSet,String entityName) throws Exception{
final String suffix = "Response.java";
final String path = entityResponsePath + "\\" + entityName + suffix;
final String templateName = entityResponseTemplate;
File mapperFile = new File(path);
List<ColumnClass> columnClassList = new ArrayList<ColumnClass>();
ColumnClass columnClass = null;
while(resultSet.next()){
columnClass = new ColumnClass();
//获取字段名称
columnClass.setColumnName(resultSet.getString("COLUMN_NAME"));
//获取字段类型
columnClass.setColumnType(resultSet.getString("TYPE_NAME"));
//转换字段名称,如 sys_name 变成 SysName
columnClass.setChangeColumnName(replaceUnderLineAndUpperCase(resultSet.getString("COLUMN_NAME")));
//字段在数据库的注释
columnClass.setColumnComment(resultSet.getString("REMARKS"));
columnClassList.add(columnClass);
}
Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("model_column",columnClassList);
generateFileByTemplate(templateName,mapperFile,dataMap);
}
// /**
// * 生成DTO文件
// * @throws Exception
// */
// private void generateDTOFile() throws Exception{
// final String pageName = "request\\";
// final String suffix = "Request.java";
// final String path = "D:\\javasoft\\eclipsework\\guangxi-assets\\assets-common\\src\\main\\java\\cn\\vpclub\\assets\\request\\" + changeTableName + suffix;
// final String templateName = "PageParam.ftl";
// File mapperFile = new File(path);
// Map<String,Object> dataMap = new HashMap<String,Object>();
// generateFileByTemplate(templateName,mapperFile,dataMap);
// }
/**
* 生成控制层
* @throws Exception
*/
private void generateControllerFile(String entityName) throws Exception{
final String suffix = "Controller.java";
final String path = controllerPath + "\\" + entityName + suffix;
final String templateName = controllerTemplate;
File mapperFile = new File(path);
Map<String,Object> dataMap = new HashMap<String,Object>();
generateFileByTemplate(templateName,mapperFile,dataMap);
}
/**
* 生成业务实现层
* @throws Exception
*/
private void generateServiceImplFile(String entityName) throws Exception{
final String Prefix = "I";
final String suffix = "Service.java";
final String path = serviceImplPath + "\\"+ Prefix + entityName + suffix;
final String templateName = serviceImplTemplate;
File mapperFile = new File(path);
Map<String,Object> dataMap = new HashMap<String,Object>();
generateFileByTemplate(templateName,mapperFile,dataMap);
}
/**
* 生成业务接口层
* @throws Exception
*/
private void generateServiceInterfaceFile(String entityName) throws Exception{
final String suffix = "Service.java";
final String path = serviceInterfacePath + "\\" + entityName + suffix;
final String templateName = serviceInterfaceTemplate;
File mapperFile = new File(path);
Map<String,Object> dataMap = new HashMap<String,Object>();
generateFileByTemplate(templateName,mapperFile,dataMap);
}
/**
* 生成数据库连接层代码
* @throws Exception
*/
private void generateMapperFile(String entityName) throws Exception{
final String suffix = "Mapper.java";
final String path = MapperPath + "\\" + entityName + suffix;
final String templateName = MapperTemplate;
File mapperFile = new File(path);
Map<String,Object> dataMap = new HashMap<String,Object>();
generateFileByTemplate(templateName,mapperFile,dataMap);
}
/**
* 生成数据库连接层xml
* @throws Exception
*/
private void generateMapperXmlFile(String entityName) throws Exception{
final String suffix = "Mapper.xml";
final String path = mapperXmlPath + "\\" + entityName + suffix;
final String templateName = mapperXmlTemplate;
File mapperFile = new File(path);
Map<String,Object> dataMap = new HashMap<String,Object>();
generateFileByTemplate(templateName,mapperFile,dataMap);
}
private void generateFileByTemplate(final String templateName,File file,Map<String,Object> dataMap) throws Exception{
Template template = FreeMarkerTemplateUtils.getTemplate(templateName);
FileOutputStream fos = new FileOutputStream(file);
dataMap.put("table_name",changeTableName);
dataMap.put("table_name_small",tableName);
dataMap.put("table",table);
dataMap.put("author",AUTHOR);
dataMap.put("date",CURRENT_DATE);
dataMap.put("package_name",packageName);
dataMap.put("table_annotation",tableAnnotation);
// dataMap.put("corePageName",corePageName);
Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"),10240);
template.process(dataMap,out);
}
@Getter
@Setter
public class ColumnClass {
/** 数据库字段名称 **/
private String columnName;
/** 数据库字段类型 **/
private String columnType;
/** 数据库字段首字母小写且去掉下划线字符串 **/
private String changeColumnName;
/** 数据库字段注释 **/
private String columnComment;
public String getColumnComment() {
return columnComment;
}
public void setColumnComment(String columnComment) {
this.columnComment = columnComment;
}
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getColumnType() {
return columnType;
}
public void setColumnType(String columnType) {
this.columnType = columnType;
}
public String getChangeColumnName() {
return changeColumnName;
}
public void setChangeColumnName(String changeColumnName) {
this.changeColumnName = changeColumnName;
}
}
}
5.模板代码:
/**
* Controller.ftl
*/
package ${package_name}.controller;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import ${package_name}.request.BaseRequest;
import ${package_name}.response.BaseResponse;
import ${package_name}.entity.${table_name};
import ${package_name}.request.${table_name}Request;
import ${package_name}.service.${table_name}Service;
/**
* 描述:${table_annotation}控制层
* @author ${author}
* @date ${date}
*/
@Api(value = "/${table_name_small}",tags = "${table_annotation}模块")
@RestController
@RequestMapping("/${table_name_small}")
public class ${table_name}Controller {
@Autowired
private ${table_name}Service ${table_name_small}Service;
/**
* 查询所有
*/
@ApiOperation("${table_annotation}")
@ApiParam("${table_name_small}Request")
@PostMapping("/page")
public BaseResponse page(@Validated @RequestBody ${table_name}Request ${table_name_small}Request) {
return ${table_name_small}Service.page(${table_name_small}Request);
}
}
/**
* Entity.ftl
*/
package ${package_name}.entity;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.ToString;
/**
* 描述:${table_annotation}模型
* @author ${author}
* @date ${date}
*/
@Data
@ToString(callSuper = true)
@TableName("${table}")
public class ${table_name} implements Serializable {
<#if model_column?exists>
<#list model_column as model>
/***${model.columnComment!}*/
<#-- @ApiModelProperty(value="${model.columnComment}",name="${model.changeColumnName?uncap_first}")-->
<#if (model.columnType = 'BIGINT' && model.columnName = 'id')>
@TableId("${model.columnName?uncap_first}")
private Long ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'BIGINT' && model.columnName != 'id')>
@TableField("${model.columnName?uncap_first}")
private Long ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'INT')>
@TableField("${model.columnName?uncap_first}")
private Integer ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'DECIMAL')>
@TableField("${model.columnName?uncap_first}")
private BigDecimal ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'VARCHAR' || model.columnType = 'TEXT' || model.columnType = 'CHAR')>
@TableField("${model.columnName?uncap_first}")
private String ${model.changeColumnName?uncap_first};
</#if>
<#if model.columnType = 'TIMESTAMP' || model.columnType = 'YEAR' || model.columnType = 'DATE' || model.columnType = 'DATETIME' >
@TableField("${model.columnName?uncap_first}")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private Date ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType != 'BIGINT' && model.columnType != 'INT' && model.columnType != 'DECIMAL' && model.columnType != 'VARCHAR' && model.columnType != 'TEXT' && model.columnType != 'CHAR' && model.columnType != 'TIMESTAMP' && model.columnType != 'YEAR' && model.columnType != 'DATE' && model.columnType != 'DATETIME')>
@TableField("${model.columnName?uncap_first}")
private MISS ${model.changeColumnName?uncap_first};
</#if>
</#list>
</#if>
}
/**
* EntityRequest.ftl
*/
package ${package_name}.request;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import lombok.ToString;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import ${package_name}.request.BaseRequest;
/**
* 描述:${table_annotation}Request
* @author ${author}
* @date ${date}
*/
@Data
@ToString(callSuper = true)
public class ${table_name}Request extends BaseRequest implements Serializable {
<#if model_column?exists>
<#list model_column as model>
/***${model.columnComment!}*/
@ApiModelProperty(value="${model.columnComment}",name="${model.changeColumnName?uncap_first}")
<#if (model.columnType = 'BIGINT' && model.columnName = 'id')>
private Long ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'BIGINT' && model.columnName != 'id')>
private Long ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'INT')>
private Integer ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'DECIMAL')>
private BigDecimal ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'VARCHAR' || model.columnType = 'TEXT' || model.columnType = 'CHAR')>
private String ${model.changeColumnName?uncap_first};
</#if>
<#if model.columnType = 'TIMESTAMP' || model.columnType = 'YEAR' || model.columnType = 'DATE' || model.columnType = 'DATETIME' >
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private Date ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType != 'BIGINT' && model.columnType != 'INT' && model.columnType != 'DECIMAL' && model.columnType != 'VARCHAR' && model.columnType != 'TEXT' && model.columnType != 'CHAR' && model.columnType != 'TIMESTAMP' && model.columnType != 'YEAR' && model.columnType != 'DATE' && model.columnType != 'DATETIME')>
private MISS ${model.changeColumnName?uncap_first};
</#if>
</#list>
</#if>
}
/**
* EntityResponse.ftl
*/
package ${package_name}.response;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import lombok.ToString;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
/**
* 描述:${table_annotation}Response
* @author ${author}
* @date ${date}
*/
@Data
@ToString(callSuper = true)
public class ${table_name}Response implements Serializable {
<#if model_column?exists>
<#list model_column as model>
<#if (model.columnType = 'BIGINT' && model.columnName = 'id')>
@JsonSerialize(using = ToStringSerializer.class)
private Long ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'BIGINT' && model.columnName != 'id')>
private Long ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'INT')>
private Integer ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'TINYINT')>
private Integer ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'DECIMAL')>
private BigDecimal ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType = 'VARCHAR' || model.columnType = 'TEXT' || model.columnType = 'CHAR')>
private String ${model.changeColumnName?uncap_first};
</#if>
<#if model.columnType = 'TIMESTAMP' || model.columnType = 'YEAR' || model.columnType = 'DATE' || model.columnType = 'DATETIME' >
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private Date ${model.changeColumnName?uncap_first};
</#if>
<#if (model.columnType != 'BIGINT' && model.columnType != 'INT' && model.columnType != 'VARCHAR' && model.columnType != 'DECIMAL' && model.columnType != 'TEXT' && model.columnType != 'CHAR' && model.columnType != 'TIMESTAMP' && model.columnType != 'YEAR' && model.columnType != 'DATE' && model.columnType != 'DATETIME')>
private MISS ${model.changeColumnName?uncap_first};
</#if>
</#list>
</#if>
}
/**
* Service.ftl
*/
package ${package_name}.service;
import ${package_name}.request.${table_name}Request;
import ${package_name}.response.BaseResponse;
import ${package_name}.entity.${table_name};
import com.baomidou.mybatisplus.service.IService;
/**
* 描述:${table_annotation}服务实现层接口
* @author ${author}
* @date ${date}
*/
public interface ${table_name}Service extends IService<${table_name}>{
public BaseResponse page(${table_name}Request ${table_name_small}Request);
}
/**
* ServiceImpl.ftl
*/
package ${package_name}.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import ${package_name}.entity.${table_name};
import ${package_name}.request.${table_name}Request;
import ${package_name}.response.BaseResponse;
import ${package_name}.service.${table_name}Service;
import ${package_name}.mapper.${table_name}Mapper;
import ${package_name}.tools.ResponseUtils;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
/**
* 描述:${table_annotation}服务实现层
* @author ${author}
* @date ${date}
*/
@Slf4j
@Service
public class I${table_name}Service extends ServiceImpl<${table_name}Mapper, ${table_name}> implements ${table_name}Service{
@Override
public BaseResponse page(${table_name}Request ${table_name_small}Request) {
return ResponseUtils.pageSuccess();
}
}
/**
* Mapper.ftl
*/
package ${package_name}.mapper;
import ${package_name}.entity.${table_name};
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 描述:${table_annotation}数据库连接层
* @author ${author}
* @date ${date}
*/
@Mapper
public interface ${table_name}Mapper extends BaseMapper<${table_name}> {
}
/**
* MapperXml.ftl
*/
<?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="${package_name}.mapper.${table_name}Mapper" >
<!-- <select id="page" resultType="${package_name}.response.${table_name}Response">
</select> -->
</mapper>