freemarker生成代码

freemarker生成代码,第1张

freemarker生成代码

mybatis有代码生成器,mybatis-generator,pom引用配置生成位置即可,这个不是重点,网上一搜一大堆,这里不表。为啥呢,不通用,好多公司有自己的编码规范,封装了一些基础组件,不得不按照公司的规范来,那么freemarker就有用武之地了,下面咱们来介绍一下哈。

freemarker需要引用pom依赖:


	org.freemarker
	freemarker
	2.3.16

编写模板

entity.flt

package ${packageName};



public class ${className} {
    <#list attrs as attr>
    
    
    private ${attr.columnType} ${attr.columnName};
    <#list attrs as attr>
    public ${attr.columnType} get${attr.columnName?cap_first}(){
        return ${attr.columnName};
    }
    public void set${attr.columnName?cap_first}(${attr}.columnType) ${attr.columnName}{
        this.${attr.columnName} = ${attr.columnName};
    }
    
}

模板tips:

<#noparse>包围起来的部分不会被解析 

辅助类: 

package com.neo.newDemo.helper;


public class ColumnInfo {
    
    private String dbColumnName;
    
    private String columnName;
    
    private String columnType;
    
    private String dbColumnType;
    
    private String columnComment;

    public String getDbColumnName() {
        return dbColumnName;
    }

    public void setDbColumnName(String dbColumnName) {
        this.dbColumnName = dbColumnName;
    }

    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 getDbColumnType() {
        return dbColumnType;
    }

    public void setDbColumnType(String dbColumnType) {
        this.dbColumnType = dbColumnType;
    }

    public String getColumnComment() {
        return columnComment;
    }

    public void setColumnComment(String columnComment) {
        this.columnComment = columnComment;
    }

    public ColumnInfo(String dbColumnName, String columnName, String columnType, String dbColumnType, String columnComment) {
        this.dbColumnName = dbColumnName;
        this.columnName = columnName;
        this.columnType = columnType;
        this.dbColumnType = dbColumnType;
        this.columnComment = columnComment;
    }
}

主类:

package com.neo.newDemo.helper;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import org.springframework.util.StringUtils;

import java.io.*;
import java.sql.*;
import java.util.*;


public class AmazingClass {
    
    private static final String CLASS_NAME = "Amazing";
    
    private static final String TABLE_NAME = "amazing_info";
    
    private static final String LOCAL_TEMPLATE_PATH = "/Users/neo/document/new_demo/src/main/resources/templates";
    
    private static final String TEMPLATE_NAME = "entity.flt";
    
    private static final String PACKAGE_NAME = "com/neo/newDemo";
    
    private static final String AUTHOR = "neo";
    
    private static final String FILE_TO_PATH = "/Users/neo/document/new_demo/src/main/java/com/neo/newDemo/entity";

    private static Map typeNameMap = new HashMap(){{
       put("VARCHAR2","String");
       put("DATE","Date");
       put("NUMBER","Integer");
    }};

    public static void main(String[] args) {
        generate();
    }
    private static void generate(){
        if(!StringUtils.hasLength(CLASS_NAME) ||
                !StringUtils.hasLength(TABLE_NAME)){
            return;
        }
        if(CLASS_NAME.indexOf(",")>0){
            String[] classNameArr = CLASS_NAME.split(",");
            String[] tableNameArr = TABLE_NAME.split(",");
            for(int i = 0;i getColumnList(String tableName){
        Properties info = new Properties();
        info.put("user","username");
        info.put("password","123456");
        info.put("remarksReporting","true");
        String oracleUrl = "jdbc:oracle:thin:@ip:port:dbName";
        String mysql = "jdbc:mysql://ip:port/dbName";
        try {
            Connection connection = DriverManager.getConnection(mysql, info);
            DatabasemetaData metaData = connection.getmetaData();
            ResultSet columns = metaData.getColumns(null, null, tableName, null);
            List columnInfoList = new ArrayList<>();
            while(columns.next()){
                String columnName = columns.getString("COLUMN_NAME").toLowerCase();
                String typeName = columns.getString("TYPE_NAME").toLowerCase();
                String remarks = columns.getString("REMARKS")==null?"":columns.getString("TYPE_NAME").toLowerCase();
                ColumnInfo columnInfo = new ColumnInfo(columnName, replaceUpderlineToUpper(columnName,"_",""),
                        typeNameMap.get(typeName), typeName, remarks);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private static String replaceUpderlineToUpper(String columnName, String regex, String replacement) {
        if(!StringUtils.hasLength(columnName)){
            return columnName;
        }
        String newString = "";
        int first;
        while(columnName.indexOf(regex)!=-1){
            first = columnName.indexOf(regex);
            if(first != columnName.length()){
                newString = newString + columnName.substring(0, first) + replacement;
                columnName = columnName.substring(first + regex.length());
                columnName = firstCharacterToUpper(columnName);
            }
        }
        newString = newString + columnName;
        return newString;
    }

    private static String firstCharacterToUpper(String str){return str.substring(0,1).toUpperCase() + str.substring(1);}

    private static void gen(List list, String className){
        Configuration cfg = new Configuration();
        try {
            cfg.setDirectoryForTemplateLoading (new File(LOCAL_TEMPLATE_PATH));
            cfg.setDefaultEncoding("UTF-8");
            cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
            Template template = cfg.getTemplate(TEMPLATE_NAME);
            Map root = new HashMap<>();
            root.put ("packageName", PACKAGE_NAME);
                    root.put ("className",
                            className);
            root.put ("author", AUTHOR);
            root.put ("attrs" ,list);
            File dir = new File (FILE_TO_PATH);
            if (dir.exists()){
                dir.mkdirs();
            }
            OutputStream fos
                    = new FileOutputStream(new File(dir, className+". java")) ;
            Writer out = new OutputStreamWriter(fos);
            template.process (root, out);
            fos.flush();
            fos.close();
            System.out.println("success");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5681604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存