經過java代碼讀取數據庫表反向生成相應的pojo類

下午要根據數據庫的一個表寫一個pojo,那個累啊,80列名。寫了大概10列就沒心情寫了。因而就想到經過數據庫反向生成java類,但沒有 myeclipse又不懂生成,因而手動寫了一個大概的方法,暫時僅僅在sqlserver測試經過,對於包名跟引用類就沒寫了,把代碼複製到 eclipse直接ctrl+shift+o就導入了 html


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import com.onedear.util.database.DataBaseType;

/**
 * 數據庫工具類
 *
 * @author onedear
 * @data:2010-10-21 下午06:12:39
 */
public class DBUtil {高中英語重點語法有哪些java


    public static final int SQLSERVER = 1;
    public static final int MYSQL = 2;
    public static final int ORACLE = 3;
    private static final String LINE = "\r\n";
    private static final String TAB = "\t";欠款

    /**
     * 用於調試,懶得寫相應的參數
     *
     * @return
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public static Connection getConnection() throws ClassNotFoundException, SQLException {
            return getConnection("192.168.0.161:1997", "ETForMonitor_V2", "sa",
                    "password", DBUtil.SQLSERVER);
    }

    /**
     *
     * 經過jdbc獲取相應的數據庫連接connection
     *
     * @param ipport
     *            ip+port ,eg.: 192.168.0.161:1997
     * @param dbName
     *            databaseName ,eg. : ETForMonitor_V2
     * @param username
     *            eg.:sa
     * @param password
     *            eg. :password
     * @param type
     *            請看本類的靜態變量
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static Connection getConnection(String ipport, String dbName,
            String username, String password, int type)
            throws ClassNotFoundException, SQLException {
        String jdbcString = null;
        if (type == SQLSERVER) {
            jdbcString = "jdbc:jtds:sqlserver://" + ipport + ";databaseName="
                    + dbName;
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
        } else if (type == MYSQL) {
            jdbcString = "jdbc:mysql://" + ipport + "/" + dbName;
            Class.forName("org.gjt.mm.mysql.Driver");
        } else if (type == ORACLE) {
            jdbcString = "jdbc:oracle:thin:@" + ipport + ":" + dbName;
            Class.forName("oracle.jdbc.driver.OracleDriver");
        }

        Connection connection = null;
        connection = DriverManager
                .getConnection(jdbcString, username, password);
        return connection;
    }

    /**
     * 數據庫表生成相應的java類,生成規則
     * 類名=        表名(第一個字母大寫)
     * 屬性名=   數據庫列名
     * get/set方法 = 根據標準生成
     * 其中生成的基本類型均爲包裝類,例如Integer , Long , Boolean , String 
     * @param connection
     * @param tableName
     * @param dbType
     * @param path
     * @param isCreateFile
     * @return
     * @throws SQLException
     */
    public static String table2pojo(Connection connection, String tableName,
            int dbType, String path , boolean isCreateFile) throws SQLException {
        String sql = "select * from " + tableName + " where 1 <> 1";
        PreparedStatement ps = null;
        ResultSet rs = null;
        ps = connection.prepareStatement(sql);
        rs = ps.executeQuery();
        ResultSetMetaData md = rs.getMetaData();
        int columnCount = md.getColumnCount();
       
        StringBuffer sb = new StringBuffer();
        tableName = tableName.substring(0, 1).toUpperCase() +tableName.subSequence(1, tableName.length());
        sb.append("public class " + tableName + " {");
        sb.append(LINE);

        for (int i = 1; i <= columnCount; i++) {
            sb.append(TAB);
            sb.append("private "
                    + DataBaseType.getPojoType(md.getColumnTypeName(i)) + " "
                    + md.getColumnName(i) + ";");
            // System.out.println("name : " + md.getColumnName(i) +
            // "   , type :"
            // + md.getColumnTypeName(i));
            sb.append(LINE);
        }

        for (int i = 1; i <= columnCount; i++) {
            sb.append(TAB);

            String pojoType = DataBaseType.getPojoType(md.getColumnTypeName(i));
            String columnName = md.getColumnName(i);
            String getName = null;
            String setName = null;
            if (columnName.length() > 1) {
                getName = "public "+pojoType+" get" + columnName.substring(0, 1).toUpperCase()
                        + columnName.substring(1, columnName.length()) + "() {";
                setName = "public void set" + columnName.substring(0, 1).toUpperCase()
                        + columnName.substring(1, columnName.length()) + "("
                        + pojoType + " " + columnName + ") {";
            } else {
                getName = "public get" + columnName.toUpperCase() + "() {";
                setName = "public set" + columnName.toUpperCase() + "(" + pojoType
                        + " " + columnName + ") {";
            }
           
            sb.append(LINE).append(TAB).append(getName);
            sb.append(LINE).append(TAB).append(TAB);
            sb.append("return " + columnName +";");
            sb.append(LINE).append(TAB).append("}");
            sb.append(LINE);
            sb.append(LINE).append(TAB).append(setName);
            sb.append(LINE).append(TAB).append(TAB);
            sb.append("this." +  columnName + " = " + columnName +";" );
            sb.append(LINE).append(TAB).append("}");
            sb.append(LINE);
           
        }
        sb.append("}");

        System.out.println(sb.toString());
       
        if(isCreateFile)
            FileUtils.stringToFile(null,tableName +".java" , sb.toString());
        return null;
    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection con = getConnection();
        table2pojo(con, "PlayBackVisitorControl", DBUtil.SQLSERVER, "" , true);
       
    }


}


mysql

相關文章
相關標籤/搜索