您的位置:首页 > 编程语言 > Java开发

数据库的表字段自动转换为java实体类

2017-10-13 11:32 211 查看
/**

 * 数据库表转换成javaBean对象小工具(已用了很长时间),

 *  1 bean属性按原始数据库字段经过去掉下划线,并大写处理首字母等等.

 *  2 生成的bean带了数据库的字段说明.

 *  3 各位自己可以修改此工具用到项目中去.

 */

public class GenerateJavaFileUtils {

    private String tablename = "";

    private String[] colnames;

    private String[] colTypes;

    private int[] colSizes; // 列名大小

    private int[] colScale; // 列名小数精度

    private boolean importUtil = false;

    private boolean importSql = false;

    private boolean importMath = false;

 

    /**

     * @param args

     */

    public void tableToEntity(String tName) {

        tablename = tName;

        // 数据连Connection获取,自己想办法就行.

        Connection conn = getConnection();

        String strsql = "SELECT * FROM " + tablename;// +" WHERE ROWNUM=1"

                                                        // 读一行记录;

        try {

            System.out.println(strsql);

            PreparedStatement pstmt = conn.prepareStatement(strsql);

            pstmt.executeQuery();

            ResultSetMetaData rsmd = pstmt.getMetaData();

            int size = rsmd.getColumnCount(); // 共有多少列

          colnames = new String[size];

            colTypes = new String[size];

            colSizes = new int[size];

            colScale = new int[size];

            for (int i = ; i < rsmd.getColumnCount(); i++) {

                rsmd.getCatalogName(i + 1);

                colnames[i] = rsmd.getColumnName(i + 1).toLowerCase();

                colTypes[i] = rsmd.getColumnTypeName(i + 1).toLowerCase();

                colScale[i] = rsmd.getScale(i + 1);

                System.out.println(rsmd.getCatalogName(i + 1));

                if ("datetime".equals(colTypes[i])) {

                    importUtil = true;

               }

                if ("image".equals(colTypes[i]) || "text".equals(colTypes[i])) {

                    importSql = true;

                }

                if (colScale[i] > ) {

                    importMath = true;

                }

                colSizes[i] = rsmd.getPrecision(i + 1);

            }

            String content = parse(colnames, colTypes, colSizes);

            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 {

            releaseConnection(conn);

        }

    }

 

    /**

     * 解析处理(生成实体类主体代码)

     */

    private String parse(String[] colNames, String[] colTypes, int[] colSizes) {

        StringBuffer sb = new StringBuffer();

        sb.append("\r\nimport java.io.Serializable;\r\n");

        if (importUtil) {

            sb.append("import java.util.Date;\r\n");

        }

        if (importSql) {

            sb.append("import java.sql.*;\r\n\r\n");

        }

        if (importMath) {

            sb.append("import java.math.*;\r\n\r\n");

        }

        // 表注释

       processColnames(sb);

        sb.append("public class " + initcap(tablename)

                + " implements Serializable {\r\n");

        processAllAttrs(sb);

        processAllMethod(sb);

        sb.append("}\r\n");

        System.out.println(sb.toString());

        return sb.toString();

 

    }

 

    /**

     * 处理列名,把空格下划线'_'去掉,同时把下划线后的首字母大写 要是整个列在3个字符及以内,则去掉'_'后,不把"_"后首字母大写.

     * 同时把数据库列名,列类型写到注释中以便查看,

     *

     * @param sb

     */

    private void processColnames(StringBuffer sb) {

        sb.append("\r\n/** " + tablename + "\r\n");

        String colsiz = "";

        for (int i = ; i < colnames.length; i++) {

            colsiz = colSizes[i] <=  ? "" : (colScale[i] <=  ? "("

                    + colSizes[i] + ")" : "(" + colSizes[i] + "," + colScale[i]

                    + ")");

            sb.append("\t" + colnames[i].toUpperCase() + "    "

                    + colTypes[i].toUpperCase() + colsiz + "\r\n");

            char[] ch = colnames[i].toCharArray();

            char c = 'a';

            if (ch.length > 3) {

                for (int j = ; j < ch.length; j++) {

                    c = ch[j];

                    if (c == '_') {

                        if (ch[j + 1] >= 'a' && ch[j + 1] <= 'z') {

                            ch[j + 1] = (char) (ch[j + 1] - 32);

                        }

                    }

               }

           }

            String str = new String(ch);

            colnames[i] = str.replaceAll("_", "");

        }

        sb.append("*/\r\n");

    }

 

    /**

     * 生成所有的方法

     *

     * @param sb

     */

    private void processAllMethod(StringBuffer sb) {

        for (int i = ; i < colnames.length; i++) {

            sb.append("\tpublic void set"

                    + initcap(colnames[i])

                    + "("

                    + oracleSqlType2JavaType(colTypes[i], colScale[i],

                            colSizes[i]) + " " + colnames[i] + "){\r\n");

            sb.append("\t\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");

            sb.append("\t}\r\n");

 

            sb.append("\tpublic "

                    + oracleSqlType2JavaType(colTypes[i], colScale[i],

                            colSizes[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) {

        sb.append("\tprivate static final long serialVersionUID = 1L;\r\n");

        for (int i = ; i < colnames.length; i++) {

            sb.append("\tprivate "

                    + oracleSqlType2JavaType(colTypes[i], colScale[i],

                            colSizes[i]) + " " + colnames[i] + ";\r\n");

        }

        sb.append("\r\n");

    }

 

    /**

     * 把输入字符串的首字母改成大写

     *

     * @param str

     * @return

     */

    private String initcap(String str) {

        char[] ch = str.toCharArray();

        if (ch[] >= 'a' && ch[] <= 'z') {

            ch[] = (char) (ch[] - 32);

        }

        return new String(ch);

    }

 

    /**

     * Oracle

     *

     * @param sqlType

     * @param scale

     * @return

     */

    private String oracleSqlType2JavaType(String sqlType, int scale, int size) {

        if (sqlType.equals("integer")) {

            return "Integer";

        } else if (sqlType.equals("long")) {

            return "Long";

        } else if (sqlType.equals("float") || sqlType.equals("float precision"))

            return "float";

        else if (sqlType.equals("double") || sqlType.equals("double precision")) {

            return "Double";

        } else if (sqlType.equals("number") || sqlType.equals("decimal")

                || sqlType.equals("numeric") || sqlType.equals("real")) {

            return scale ==  ? (size < 1 ? "Integer" : "Long") : "BigDecimal";

        } else if (sqlType.equals("varchar") || sqlType.equals("varchar2")

                || sqlType.equals("char") || sqlType.equals("nvarchar2")

                || sqlType.equals("nchar")) {

            return "String";

        } else if (sqlType.equals("datetime") || sqlType.equals("date")

                || sqlType.equals("timestamp")) {

            return "Date";

        }

        return null;

    }

 

    /**

     * 自动获取jcbc链接

     */

    protected static Connection getConnection() {

        Connection localConnection = null;

        try {

            Class.forName("oracle.jdbc.OracleDriver");

            localConnection = DriverManager.getConnection(

                    "jdbc:oracle:thin:@//localhost:1521/base", "test", "test");

            localConnection.setAutoCommit(false);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return localConnection;

    }

 

    /**

     * 释放jdbc链接

     *

     * @param conn

     */

    protected static void releaseConnection(Connection conn) {

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

            conn = null;

        }

    }

 

    /**

     * @param args

     */

    public static void main(String[] args) {

        GenerateJavaFileUtils t = new GenerateJavaFileUtils();

        t.tableToEntity("users");

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐