FreeMarker生成基础代码

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>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值