首頁>技術>

工作中寫entry太繁瑣,寫了一個小程式反向生成。從而大大減少了工作量

import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;/** * @author weiwei.Wang * @date 2016年7月14日 * @todo TODO 根據DB name獲取資料庫中的table,從而生成java檔案 *  */public class CreateBean {    private String[] colnames; // 列名陣列    private String[] colTypes; // 列名型別陣列    private int[] colSizes; // 列名大小陣列    private boolean f_util = false; // 是否需要匯入包java.util.*    private boolean f_sql = false; // 是否需要匯入包java.sql.*    private String url = "jdbc:mysql://127.0.0.1:3306/enrichmind";    private String user = "root";    private String pwd = "";    /**     * 獲取資料庫連線     *      * @return     */    public Connection getConnection() {        Connection conn = null;        try {            Class.forName("com.mysql.jdbc.Driver");            conn = DriverManager.getConnection(url, user, pwd);        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        }        return conn;    }    /**     * 根據資料庫名生成bean java檔案     *      * @param path     * @throws Exception     */    public void createBeanMethod(String DBName, String javaFileSavePath)            throws Exception {        // myDB為資料庫名        List<String> tableList = getTableNameByDBname(DBName);        for (int j = 0; j < tableList.size(); j++) {            Connection conn = getConnection(); // 得到資料庫連線            String tableName = tableList.get(j);            String strsql = "select * from " + tableName;            PreparedStatement pstmt = null;            ResultSetMetaData rsmd = null;            try {                pstmt = conn.prepareStatement(strsql);                rsmd = pstmt.getMetaData();                int size = rsmd.getColumnCount(); // 共有多少列                colnames = new String[size];                colTypes = new String[size];                colSizes = new int[size];                for (int i = 0; i < rsmd.getColumnCount(); i++) {                    colnames[i] = rsmd.getColumnName(i + 1);                    colTypes[i] = rsmd.getColumnTypeName(i + 1);                    if (colTypes[i].equalsIgnoreCase("datetime")) {                        f_util = true;                    }                    if (colTypes[i].equalsIgnoreCase("image")                            || colTypes[i].equalsIgnoreCase("text")) {                        f_sql = true;                    }                    colSizes[i] = rsmd.getColumnDisplaySize(i + 1);                }                String content = parse(colnames, colTypes, colSizes,                        javaFileSavePath, tableName);                try {                    FileWriter fw = new FileWriter(initcap(tableName) + ".java");                    PrintWriter pw = new PrintWriter(fw);                    pw.println(content);                    pw.flush();                    pw.close();                } catch (IOException e) {                    e.printStackTrace();                }            } catch (SQLException e) {                e.printStackTrace();            } finally {                try {                    pstmt.close();                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }        }    }    /**     * 根據資料庫名獲取所有table     *      * @param DBname     * @return     */    public List<String> getTableNameByDBname(String DBname) {        List<String> list = new ArrayList<String>();        try {            Connection conn = getConnection();            DatabaseMetaData dmd = (DatabaseMetaData) conn.getMetaData();            ResultSet rs = dmd.getTables(null, null, "%", null);            while (rs.next()) {                // System.err.println("======"+ rs.getString("TABLE_NAME"));                list.add(rs.getString("TABLE_NAME"));            }        } catch (SQLException e) {            e.printStackTrace();        }        return list;    }    /**     * 解析處理(生成實體類主體程式碼)     *      * @throws Exception     */    private String parse(String[] colNames, String[] colTypes, int[] colSizes,            String path, String tableName) throws Exception {        StringBuffer sb = new StringBuffer();        sb.append("import lombok.Data;\r\n");        if (f_util) {            sb.append("\r\n");            sb.append("import java.util.Date;\r\n");        }        if (f_sql) {            sb.append("\r\n");            sb.append("import java.sql.*;\r\n\r\n\r\n");        }        sb.append("@Data\r\n");        sb.append("public class " + initcap(tableName)                + " extends AbstractEntity" + " {\r\n");        processAllAttrs(sb);        // processAllMethod(sb);        sb.append("}\r\n");        // 將string流寫入檔案        FileOperation.writeTxtFile(sb.toString(), new File(path                + initcap(tableName) + ".java"));        System.out.println(sb.toString());        return sb.toString();    }    /**     * 生成所有的方法     *      * @param sb     */    @SuppressWarnings("unused")    private void processAllMethod(StringBuffer sb) {        for (int i = 0; i < colnames.length; i++) {            sb.append("\tpublic void set" + initcap(colnames[i]) + "("                    + sqlType2JavaType(colTypes[i]) + " " + colnames[i]                    + "){\r\n");            sb.append("\t\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");            sb.append("\t}\r\n");            sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get"                    + initcap(colnames[i]) + "(){\r\n");            sb.append("\t\treturn " + colnames[i] + ";\r\n");            sb.append("\t}\r\n");        }    }    /**     * 解析輸出屬性     *      * @return     */    private void processAllAttrs(StringBuffer sb) {        for (int i = 0; i < colnames.length; i++) {            sb.append("\r\n");            sb.append("\t@Column(name = \"" + colnames[i] + "\")\r\n");            sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " "                    + colnames[i] + ";\r\n");        }    }    /**     * 把輸入字串的首字母改成大寫     *      * @param str     * @return     */    private String initcap(String str) {        char[] ch = str.toCharArray();        if (ch[0] >= 'a' && ch[0] <= 'z') {            ch[0] = (char) (ch[0] - 32);        }        return new String(ch);    }    /**     * 將所有資料庫中的欄位型別轉換為java中型別     *      * @param sqlType     * @return     */    private String sqlType2JavaType(String sqlType) {        if (sqlType.equalsIgnoreCase("bit")) {            return "bool";        } else if (sqlType.equalsIgnoreCase("tinyint")) {            return "byte";        } else if (sqlType.equalsIgnoreCase("smallint")) {            return "short";        } else if (sqlType.equalsIgnoreCase("int")) {            return "int";        } else if (sqlType.equalsIgnoreCase("bigint")) {            return "long";        } else if (sqlType.equalsIgnoreCase("float")) {            return "float";        } else if (sqlType.equalsIgnoreCase("decimal")                || sqlType.equalsIgnoreCase("numeric")                || sqlType.equalsIgnoreCase("real")) {            return "double";        } else if (sqlType.equalsIgnoreCase("money")                || sqlType.equalsIgnoreCase("smallmoney")) {            return "double";        } else if (sqlType.equalsIgnoreCase("varchar")                || sqlType.equalsIgnoreCase("char")                || sqlType.equalsIgnoreCase("nvarchar")                || sqlType.equalsIgnoreCase("nchar")) {            return "String";        } else if (sqlType.equalsIgnoreCase("datetime")) {            return "Date";        }        else if (sqlType.equalsIgnoreCase("image")) {            return "Blob";        } else if (sqlType.equalsIgnoreCase("text")) {            return "Clob";        }        return null;    }    public static void main(String[] args) throws Exception {        CreateBean createBean = new CreateBean();        String javaFileSavePath = "D:\\wer\\"; //        String DBname = "enrichmind";        createBean.createBeanMethod(DBname, javaFileSavePath);    }}

原文作者:water___Wang原文參考:https://waterwang.blog.csdn.net/article/details/52221109

9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • React 練習專案,仿簡書部落格寫作平臺