根据Oracle表结构生成PO实体工具类

每次根据数据表写实体类和form类都觉得好麻烦,也没有装相应的工具,闲来无事就自己写了个工具类。具体代码如下:

package com.hnjz.app.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 com.hnjz.base.db.MetaDataUtil;

/**
	 * 根据传入的数据库表名,生成po属性
	 * 以_结尾的会去掉_ 例如:数据库字段名称 id_,实体类属性名称:id
	 * 以_分割的,会以_分割,分割后的字符串数组从第二个字符串开始首字母大写,然后再组成最终的属性名称 
	 * 例 :数据库字段名称unit_name,实体类属性名称:unitName
	 * @param tableName
	 */
public class BuildPoByTable {

	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();
			}
		}
		
	}
	
	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;
        
	}
	
	
	//字符串大写换小写
	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);
	}
	
	
	
}

控制台打印如下:

private String id ;
private String unitName;
private String unitCode;
private String unitAddr;
private Double unitCapital;
private Double unitInvestment;

字段已经有了,用myEclipse生成get,set方法即可。

注意:循环ResultSetMetaData下标从1开始,不是从0开始。

2、第二种方法(可以查出来注释):

利用下面的sql查出指定数据库表的字段信息,生成实体类

SELECT  C.COLUMN_NAME, C.DATA_TYPE, C.DATA_SCALE, D.COMMENTS
  FROM all_tab_columns C, all_col_comments D
 WHERE C.TABLE_NAME = D.TABLE_NAME
   AND C.OWNER = D.OWNER
   AND C.TABLE_NAME = 'tabname'
   AND D.TABLE_NAME = 'tabname'
   AND C.COLUMN_NAME = D.COLUMN_NAME
   AND C.OWNER = 'dbusername';

猜你喜欢

转载自blog.csdn.net/xingyuncaojun/article/details/84877115