• 小程序---根据数据库反向生成java文件


    工作中写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;
    ");
            if (f_util) {
                sb.append("
    ");
                sb.append("import java.util.Date;
    ");
            }
            if (f_sql) {
                sb.append("
    ");
                sb.append("import java.sql.*;
    
    
    ");
            }
            sb.append("@Data
    ");
            sb.append("public class " + initcap(tableName)
                    + " extends AbstractEntity" + " {
    ");
            processAllAttrs(sb);
            // processAllMethod(sb);
            sb.append("}
    ");
    
            // 将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("	public void set" + initcap(colnames[i]) + "("
                        + sqlType2JavaType(colTypes[i]) + " " + colnames[i]
                        + "){
    ");
                sb.append("		this." + colnames[i] + "=" + colnames[i] + ";
    ");
                sb.append("	}
    ");
    
                sb.append("	public " + sqlType2JavaType(colTypes[i]) + " get"
                        + initcap(colnames[i]) + "(){
    ");
                sb.append("		return " + colnames[i] + ";
    ");
                sb.append("	}
    ");
            }
        }
    
        /**
         * 解析输出属性
         * 
         * @return
         */
        private void processAllAttrs(StringBuffer sb) {
            for (int i = 0; i < colnames.length; i++) {
                sb.append("
    ");
                sb.append("	@Column(name = "" + colnames[i] + "")
    ");
                sb.append("	private " + sqlType2JavaType(colTypes[i]) + " "
                        + colnames[i] + ";
    ");
            }
        }
    
        /**
         * 把输入字符串的首字母改成大写
         * 
         * @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);
    
        }
    }
    
  • 相关阅读:
    使用turtle库绘制一个叠加等边三角形
    使用turtle库绘制图形
    tar命令常用参数讲解
    elasticsearch 中geo point地理位置数据类型
    count(*)和count(1)的sql性能分析
    别再if/else走天下了
    正则表达式 匹配0次1次或者无限次
    linux shell 字符串操作(长度,查找,替换)
    linux expect工具使用
    mongodb分片balance
  • 原文地址:https://www.cnblogs.com/itrena/p/5927138.html
Copyright © 2020-2023  润新知