Automatically generate entity classes from database

package com.qianmi.kstore;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author ChenDaiming
 * @since 2016/5/12 16:17.
 */
public class TablesUtil {

    private  final String RN_1 = "\r\n";
    private  final String RN_2 = RN_1 + RN_1;

    //@author
    private  final String author = "ChenDaiMing";
    //file name
    private  final String FILENAME = "CustomerAddress";
    //file address
    private  final String FILEPATH="D:\\workspace\\kstore-v3-platform\\kstore-modules\\kstore-customer\\src\\main\\java\\com\\qianmi\\kstore\\manage";
    //file package name
    private  final String PACKAGE = "com.qianmi.kstore.manage";
    //Inherit class name (can be empty)
    private  final String EXTENDS_NAME = "";
    //implementation class name (can be empty)
    private  final String IMPL_NAME = "Serializable";
    // guide package
    private  final String[] IMPORT_CLASS = {"lombok.Data",
                                            "java.io.Serializable",
                                            "javax.persistence.*",
                                            "java.util.Date"
    };
    //surface
    private  final String table = "customer";
    //database
    private  final String database = "dababase";



    private  final String URL = "jdbc:mysql://172.1.2.3:3306/database?characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull";
    private  final String NAME = "root";
    private  final String PASSWORD = "123456";
    private  final String DRIVER = "com.mysql.jdbc.Driver";
    private  final String SQL = "select COLUMN_NAME,COLUMN_TYPE,column_comment from INFORMATION_SCHEMA.Columns where table_name='"+table+"' and table_schema = '"+database+"'";
    /**
     * Execute the main thread
     * @param args
     * @throws ClassNotFoundException
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        new TablesUtil().createFile();
    }

    /**
     * Create a file
     */
    public void createFile() {
        String dateAnnotation = "/**"+RN_1+" * @author "+author+RN_1+" * @since "+getDate()+RN_1+"*/"+RN_1;
        // folder path
        String dirPath = FILEPATH +"/";
        String fileName = dirPath+FILENAME+".java";
        File file = new File(dirPath);
        if(!file.exists()){
            if(file.mkdirs()){
                try {
                    new File(fileName).createNewFile();
                } catch (IOException e) {
                    showError(fileName);
                    e.printStackTrace ();
                    return;
                }
            }
        }
        FileWriter fw = null;
        try {
            fw = new FileWriter(fileName);
        } catch (IOException e) {
            e.printStackTrace ();
            return;
        }
        StringBuilder sb = new StringBuilder();
        sb.append("package ");
        sb.append(PACKAGE);
        sb.append(";");
        sb.append(RN_2);
        if(IMPORT_CLASS.length > 0){
            for (int i = 0; i < IMPORT_CLASS.length ; i++) {
                sb.append("import ");
                sb.append(IMPORT_CLASS[i]);
                sb.append(";");
                sb.append(RN_1);
            }
            sb.append(RN_1);
        }
        sb.append(dateAnnotation);
        sb.append("@Data"+RN_1);
        sb.append("@Entity"+RN_1);
        sb.append("@Table(name = \""+table+"\")"+RN_1);
        sb.append("public class ");
        sb.append(FILENAME);
        sb.append(" ");
        if(!EXTENDS_NAME.equals("")){
            sb.append("extends ");
            sb.append(EXTENDS_NAME);
            sb.append(" ");
        }
        if(!IMPL_NAME.equals("")){
            sb.append("implements ");
            sb.append(IMPL_NAME);
        }
        sb.append("{");
        sb.append(RN_1);
        //add content
        sb.append(createContent());
        sb.append(RN_2);
        sb.append("}");
        String path = sb.toString();
        try {
            if(fw!=null){
                fw.write(path);
                showInfo(fileName);
            }

        } catch (IOException e) {
            showError(fileName);
            e.printStackTrace ();
        } finally {
            try {
                if(fw!=null){
                    fw.flush();
                    fw.close();
                }
            } catch (IOException e) {
                e.printStackTrace ();
            }
        }
    }

    /**
     * add content
     * @return
     */
    public String createContent(){
        List<Table> tables = queryTable();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < tables.size(); i++) {
            Table table = tables.get(i);
            sb.append(RN_2);
            sb.append("/**"+RN_1);
            sb.append(" *"+table.getParamDesc()+RN_1);
            sb.append("*/"+RN_1);
            if(i == 0){
                sb.append("@Id"+RN_1);
                sb.append("@GeneratedValue"+RN_1);
            }
            sb.append("@Column(name = \""+table.getParamName()+"\")"+RN_1);
            sb.append("private "+ getType(table.getParamype()) +" "+ getParamName(table.getParamName()));
            sb.append(";");
        }
        return sb.toString();
    }


    /**
     * get type
     */
    public String getType(String type){
        if(type.contains("bigint")) {
            return "Long";
        }else if(type.contains("timestamp")){
            return "Date";
        }else{
            return "String";
        }
    }

    /**
     * Get property name
     */
    public String getParamName(String param){
        if(param.contains("_")){
            String[] params = param.split("_");
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < params.length; i++) {
                if(i == 0){
                    sb.append(params[i]);
                }else{
                    sb.append(params[i].substring(0, 1).toUpperCase() + params[i].substring(1));
                }
            }
            return sb.toString();
        }else{
            return param;
        }
    }


    /**
     * add constructor
     * @param proName
     * @param className
     * @return
     */
    private String createConstructor(String proName,String className){
        StringBuilder sb = new StringBuilder();
        sb.append("public ");
        sb.append(FILENAME);
        sb.append("(String name){");
        sb.append(RN_1);
        sb.append("super(name);");
        sb.append(RN_1);
        sb.append("if(");
        sb.append (proName);
        sb.append("==null){");
        sb.append(RN_1);
        sb.append (proName);
        sb.append(" = new ");
        sb.append(className);
        sb.append("();");
        sb.append(RN_1);
        sb.append("}}");
        sb.append(RN_2);
        //Add no-argument constructor
        sb.append("public ");
        sb.append(FILENAME);
        sb.append("(){");
        sb.append(RN_1);
        sb.append("super();");
        sb.append(RN_2);
        sb.append("}");
        String constructor = sb.toString();
        return constructor;
    }



    /**
     * Query database table data
     */
    private List<Table> queryTable(){
        List<Table> tables = new ArrayList<Table>();
        try {
            Class.forName(DRIVER).newInstance();

            Connection con = DriverManager.getConnection(URL,NAME,PASSWORD);
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(SQL);
            while (rs.next()){
                tables.add(new Table(rs.getString(1),rs.getString(2),rs.getString(3)));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace ();
        } catch (InstantiationException e) {
            e.printStackTrace ();
        } catch (IllegalAccessException e) {
            e.printStackTrace ();
        } catch (SQLException e) {
            e.printStackTrace ();
        }
        return tables;
    }


    /**
     * show creation information
     */
    private  void showInfo(String info) {
        System.out.println("Create file: " + info + "Success!");
    }

    /**
     * show error message
     */
    private  void showError(String info){
        System.out.println("Create file: "+info+" failed!");
    }

    /**
     * Get system time
     */
    public  String getDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return simpleDateFormat.format(new Date());
    }

    public class Table{
        public String paramName;
        public String paramype;
        public String paramDesc;

        public Table(String paramName, String paramype, String paramDesc) {
            this.paramName = paramName;
            this.paramype = paramype;
            this.paramDesc = paramDesc;
        }

        public String getParamName() {
            return paramName;
        }

        public String getParamype() {
            return paramype;
        }

        public String getParamDesc() {
            return paramDesc;
        }

        public void setParamName(String paramName) {
            this.paramName = paramName;
        }

        public void setParamype(String paramype) {
            this.paramype = paramype;
        }

        public void setParamDesc(String paramDesc) {
            this.paramDesc = paramDesc;
        }
    }
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326360297&siteId=291194637