根据数据库字段生成实体类

根据数据库中字段类型自动转换为实体类中的属性

缩短生成实体类的时间

package common;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import MetaDataUtil;

/**
 * 根据数据库表名生成po属性
 *
 */
public class BuildPoByTableUtil {

    /**
     * 根据传入的数据库表名,生成po属性,会过滤掉VERSION_
     * 以_结尾的会去掉_ 例如:数据库字段名称 id_,实体类属性名称:id
     * 以_分割的,会以_分割,分割后的字符串数组从第二个字符串开始首字母大写,然后再组成最终的属性名称 
     * 例 :数据库字段名称unit_name,实体类属性名称:unitName
     * @param tableName
     */
    public static void buildPoByTable(String tableName){
        Connection con = getJdbcConn();
        Statement st = null;
        ResultSet rs = null;
        String sql = "select * from "+tableName;
        try {
            st = con.createStatement();
            rs = st.executeQuery(sql);
            ResultSetMetaData md = rs.getMetaData();
            for(int i = 1;i<=md.getColumnCount();i++){
                String columnName = md.getColumnName(i);
                String columnType = md.getColumnTypeName(i);
                columnName = lowerCaseChar(columnName);
                int xsws = md.getScale(i);//小数点右边的位数
                //改造字段名称
                if(columnName.endsWith("_")){
                    columnName = columnName.replace('_', ' ');
                    
                }else if(columnName.contains("_")){
                    String[] tempName = columnName.split("_");
                    String tempstr = "";
                    for(int j=1;j<tempName.length;j++){
                        tempName[j] = PoFormConverseUtil.upCaseFirstChar(tempName[j]);
                        tempstr = tempstr+tempName[j];
                    }
                    columnName = tempName[0]+tempstr;
                }
                
                if("VERSION_".equals(columnName)){
                    continue;
                }else{
                    if("VARCHAR2".equals(columnType)||"NVARCHAR2".equals(columnType)){
                        System.out.println("private String "+columnName+";");
                    }else if("NUMBER".equals(columnType)){
                        if(xsws==0){
                            System.out.println("private Integer "+columnName+";");
                        }else if(xsws>0){
                            System.out.println("private Double "+columnName+";");
                        }
                    }else if("DATE".equals(columnType)){
                        System.out.println("private Date "+columnName+";");
                    }else if("CLOB".equals(columnType)){
                        System.out.println("private String "+columnName+";");
                    }
                }

            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }

/**
* 获得数据库连接
* @return
*/
    public static Connection getJdbcConn(){
        Connection con = null;
        try {
            String name = "/jdbc.properties";
            Properties p = new Properties();
            InputStream in = MetaDataUtil.class.getResourceAsStream(name);
            p.load(in);
            String url = p.getProperty("jdbc.url");
            String username = p.getProperty("jdbc.username");
            String password = p.getProperty("jdbc.password");
            String driverName = p.getProperty("jdbc.driverClassName");
            Class.forName(driverName);
            //System.out.println("加载驱动成功!");
            //获取数据库连接
            con = DriverManager.getConnection(url, username, password);
            //System.out.println("获取数据库连接成功!");
            //System.out.println("进行数据库操作!");
           
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return con;
        
    }


/**
* 字符串大写换小写
* @param str
* @return
*/
public static String lowerCaseChar(String str){
char[] chars = str.toCharArray();
        for(int i=0;i<chars.length;i++){
             if (chars[i] >= 'A' && chars[i] <= 'Z') {
                 chars[i] = (char)(chars[i] + 32);
             }
        }
       
        return new String(chars);
    }
    
    
    public static void main(String[] args) {
        buildPoByTable("t_wxfw_zb_sq");
    }
}

 

posted @ 2018-12-07 17:19  波波96  阅读(3512)  评论(0编辑  收藏  举报