java 从数据库表反射出实体类,自动生成实体类

mysql数据库
package com.s9.common.web;


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Date;

public class GenEntityMysql {
	
	private String packageOutPath = "com.s9.cfj.user.entity";//指定实体生成所在包的路径
	private String authorName = "郑云飞";//作者名字
	private String tablename = "cfj_user";//表名
	private String[] colnames; // 列名数组
	private String[] colTypes; //列名类型数组
	private int[] colSizes; //列名大小数组
	private boolean f_util = false; // 是否需要导入包java.util.*
	private boolean f_sql = false; // 是否需要导入包java.sql.*
    
    //数据库连接
	private static final String URL ="jdbc:mysql://localhost:3306/caifujie";
	private static final String NAME = "root";
	private static final String PASS = "root";
	private static final String DRIVER ="com.mysql.jdbc.Driver";

	/*
	 * 构造函数
	 */
	public GenEntityMysql(){
    	//创建连接
    	Connection con;
		//查要生成实体类的表
    	String sql = "select * from " + tablename;
    	PreparedStatement pStemt = null;
    	try {
    		try {
				Class.forName(DRIVER);
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
    		con = DriverManager.getConnection(URL,NAME,PASS);
			pStemt = con.prepareStatement(sql);
			ResultSetMetaData rsmd = pStemt.getMetaData();
			int size = rsmd.getColumnCount();	//统计列
			colnames = new String[size];
			colTypes = new String[size];
			colSizes = new int[size];
			for (int i = 0; i < size; 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);
			
			try {
				File directory = new File("");
				//System.out.println("绝对路径:"+directory.getAbsolutePath());
				//System.out.println("相对路径:"+directory.getCanonicalPath());
				String path=this.getClass().getResource("").getPath();
				
				System.out.println(path);
				System.out.println("src/?/"+path.substring(path.lastIndexOf("/com/", path.length())) );
//				String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java";
				String outputPath = directory.getAbsolutePath()+ "/src/"+this.packageOutPath.replace(".", "/")+"/"+initcap(tablename) + ".java";
				FileWriter fw = new FileWriter(outputPath);
				PrintWriter pw = new PrintWriter(fw);
				pw.println(content);
				pw.flush();
				pw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
//			try {
//				con.close();
//			} catch (SQLException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
		}
    }

	/**
	 * 功能:生成实体类主体代码
	 * @param colnames
	 * @param colTypes
	 * @param colSizes
	 * @return
	 */
	private String parse(String[] colnames, String[] colTypes, int[] colSizes) {
		StringBuffer sb = new StringBuffer();
		sb.append("package " + this.packageOutPath + ";\r\n");
		//判断是否导入工具包
		if(f_util){
			sb.append("import java.util.Date;\r\n");
		}
		if(f_sql){
			sb.append("import java.sql.*;\r\n");
		}
		sb.append("\r\n");
		//注释部分
		sb.append("   /**\r\n");
		sb.append("    * "+tablename+" 实体类\r\n");
		sb.append("    * "+new Date()+" "+this.authorName+"\r\n");
		sb.append("    */ \r\n");
		//实体部分
		sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n");
		processAllAttrs(sb);//属性
		processAllMethod(sb);//get set方法
		sb.append("}\r\n");
		
    	//System.out.println(sb.toString());
		return sb.toString();
	}
	
	/**
	 * 功能:生成所有属性
	 * @param sb
	 */
	private void processAllAttrs(StringBuffer sb) {
		
		for (int i = 0; i < colnames.length; i++) {
			sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n");
		}
		
	}

	/**
	 * 功能:生成所有方法
	 * @param sb
	 */
	private void processAllMethod(StringBuffer sb) {
		
		for (int i = 0; i < colnames.length; i++) {
			sb.append("\tpublic void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " + 
					colnames[i] + "){\r\n");
			sb.append("\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");
			sb.append("\t}\r\n");
			sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){\r\n");
			sb.append("\t\treturn " + colnames[i] + ";\r\n");
			sb.append("\t}\r\n");
		}
		
	}
	
	/**
	 * 功能:将输入字符串的首字母改成大写
	 * @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);
	}

	/**
	 * 功能:获得列的数据类型
	 * @param sqlType
	 * @return
	 */
	private String sqlType2JavaType(String sqlType) {
		
		if(sqlType.equalsIgnoreCase("bit")){
			return "boolean";
		}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") || sqlType.equalsIgnoreCase("money") 
				|| sqlType.equalsIgnoreCase("smallmoney")){
			return "double";
		}else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") 
				|| sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar") 
				|| sqlType.equalsIgnoreCase("text")){
			return "String";
		}else if(sqlType.equalsIgnoreCase("datetime")){
			return "Date";
		}else if(sqlType.equalsIgnoreCase("image")){
			return "Blod";
		}
		
		return null;
	}
	
	/**
	 * 出口
	 * TODO
	 * @param args
	 */
	public static void main(String[] args) {
		
		new GenEntityMysql();
		
	}

}

    oracle数据库

01.package com.db.gen.entity.tool;  
02.  
03.  
04.import java.io.File;  
05.import java.io.FileWriter;  
06.import java.io.IOException;  
07.import java.io.PrintWriter;  
08.import java.sql.Connection;  
09.import java.sql.DriverManager;  
10.import java.sql.PreparedStatement;  
11.import java.sql.ResultSet;  
12.import java.sql.ResultSetMetaData;  
13.import java.sql.SQLException;  
14.import java.sql.Statement;  
15.import java.util.Date;  
16.  
17.public class GenEntityOracle {  
18.      
19.    private String packageOutPath = "com.user.entity";//指定实体生成所在包的路径  
20.    private String authorName = "郑云飞";//作者名字  
21.    private String tablename = "emp";//表名  
22.    private String[] colnames; // 列名数组  
23.    private String[] colTypes; //列名类型数组  
24.    private int[] colSizes; //列名大小数组  
25.    private boolean f_util = false; // 是否需要导入包java.util.*  
26.    private boolean f_sql = false; // 是否需要导入包java.sql.*  
27.      
28.    //数据库连接  
29.     private static final String URL ="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";  
30.     private static final String NAME = "scrot";  
31.     private static final String PASS = "tiger";  
32.     private static final String DRIVER ="oracle.jdbc.driver.OracleDriver";  
33.  
34.    /* 
35.     * 构造函数 
36.     */  
37.    public GenEntityOracle(){  
38.        //创建连接  
39.        Connection con;  
40.        //查要生成实体类的表  
41.        String sql = "select * from " + tablename;  
42.        Statement pStemt = null;  
43.        try {  
44.            try {  
45.                Class.forName(DRIVER);  
46.            } catch (ClassNotFoundException e1) {  
47.                // TODO Auto-generated catch block  
48.                e1.printStackTrace();  
49.            }  
50.            con = DriverManager.getConnection(URL,NAME,PASS);  
51.            pStemt = (Statement) con.createStatement();  
52.            ResultSet rs = pStemt.executeQuery(sql);  
53.            ResultSetMetaData rsmd = rs.getMetaData();  
54.            int size = rsmd.getColumnCount();   //统计列  
55.            colnames = new String[size];  
56.            colTypes = new String[size];  
57.            colSizes = new int[size];  
58.            for (int i = 0; i < size; i++) {  
59.                colnames[i] = rsmd.getColumnName(i + 1);  
60.                colTypes[i] = rsmd.getColumnTypeName(i + 1);  
61.                  
62.                if(colTypes[i].equalsIgnoreCase("date") || colTypes[i].equalsIgnoreCase("timestamp")){  
63.                    f_util = true;  
64.                }  
65.                if(colTypes[i].equalsIgnoreCase("blob") || colTypes[i].equalsIgnoreCase("char")){  
66.                    f_sql = true;  
67.                }  
68.                colSizes[i] = rsmd.getColumnDisplaySize(i + 1);  
69.            }  
70.              
71.            String content = parse(colnames,colTypes,colSizes);  
72.              
73.            try {  
74.                File directory = new File("");  
75.                //System.out.println("绝对路径:"+directory.getAbsolutePath());  
76.                //System.out.println("相对路径:"+directory.getCanonicalPath());  
77.                String path=this.getClass().getResource("").getPath();  
78.                  
79.                System.out.println(path);  
80.                System.out.println("src/?/"+path.substring(path.lastIndexOf("/com/", path.length())) );  
81.//              String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java";  
82.                String outputPath = directory.getAbsolutePath()+ "/src/"+this.packageOutPath.replace(".", "/")+"/"+initcap(tablename) + ".java";  
83.                FileWriter fw = new FileWriter(outputPath);  
84.                PrintWriter pw = new PrintWriter(fw);  
85.                pw.println(content);  
86.                pw.flush();  
87.                pw.close();  
88.            } catch (IOException e) {  
89.                e.printStackTrace();  
90.            }  
91.              
92.        } catch (SQLException e) {  
93.            e.printStackTrace();  
94.        } finally{  
95.//          try {  
96.//              con.close();  
97.//          } catch (SQLException e) {  
98.//              // TODO Auto-generated catch block  
99.//              e.printStackTrace();  
100.//          }  
101.        }  
102.    }  
103.  
104.    /** 
105.     * 功能:生成实体类主体代码 
106.     * @param colnames 
107.     * @param colTypes 
108.     * @param colSizes 
109.     * @return 
110.     */  
111.    private String parse(String[] colnames, String[] colTypes, int[] colSizes) {  
112.        StringBuffer sb = new StringBuffer();  
113.          
114.        //判断是否导入工具包  
115.        if(f_util){  
116.            sb.append("import java.util.Date;\r\n");  
117.        }  
118.        if(f_sql){  
119.            sb.append("import java.sql.*;\r\n");  
120.        }  
121.        sb.append("package " + this.packageOutPath + ";\r\n");  
122.        sb.append("\r\n");  
123.        //注释部分  
124.        sb.append("   /**\r\n");  
125.        sb.append("    * "+tablename+" 实体类\r\n");  
126.        sb.append("    * "+new Date()+" "+this.authorName+"\r\n");  
127.        sb.append("    */ \r\n");  
128.        //实体部分  
129.        sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n");  
130.        processAllAttrs(sb);//属性  
131.        processAllMethod(sb);//get set方法  
132.        sb.append("}\r\n");  
133.          
134.        //System.out.println(sb.toString());  
135.        return sb.toString();  
136.    }  
137.      
138.    /** 
139.     * 功能:生成所有属性 
140.     * @param sb 
141.     */  
142.    private void processAllAttrs(StringBuffer sb) {  
143.          
144.        for (int i = 0; i < colnames.length; i++) {  
145.            sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n");  
146.        }  
147.          
148.    }  
149.  
150.    /** 
151.     * 功能:生成所有方法 
152.     * @param sb 
153.     */  
154.    private void processAllMethod(StringBuffer sb) {  
155.          
156.        for (int i = 0; i < colnames.length; i++) {  
157.            sb.append("\tpublic void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " +   
158.                    colnames[i] + "){\r\n");  
159.            sb.append("\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");  
160.            sb.append("\t}\r\n");  
161.            sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){\r\n");  
162.            sb.append("\t\treturn " + colnames[i] + ";\r\n");  
163.            sb.append("\t}\r\n");  
164.        }  
165.          
166.    }  
167.      
168.    /** 
169.     * 功能:将输入字符串的首字母改成大写 
170.     * @param str 
171.     * @return 
172.     */  
173.    private String initcap(String str) {  
174.          
175.        char[] ch = str.toCharArray();  
176.        if(ch[0] >= 'a' && ch[0] <= 'z'){  
177.            ch[0] = (char)(ch[0] - 32);  
178.        }  
179.          
180.        return new String(ch);  
181.    }  
182.  
183.    /** 
184.     * 功能:获得列的数据类型 
185.     * @param sqlType 
186.     * @return 
187.     */  
188.    private String sqlType2JavaType(String sqlType) {  
189.          
190.        if(sqlType.equalsIgnoreCase("binary_double")){  
191.            return "double";  
192.        }else if(sqlType.equalsIgnoreCase("binary_float")){  
193.            return "float";  
194.        }else if(sqlType.equalsIgnoreCase("blob")){  
195.            return "byte[]";  
196.        }else if(sqlType.equalsIgnoreCase("blob")){  
197.            return "byte[]";  
198.        }else if(sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar2")   
199.                || sqlType.equalsIgnoreCase("varchar2")){  
200.            return "String";  
201.        }else if(sqlType.equalsIgnoreCase("date") || sqlType.equalsIgnoreCase("timestamp")  
202.                 || sqlType.equalsIgnoreCase("timestamp with local time zone")   
203.                 || sqlType.equalsIgnoreCase("timestamp with time zone")){  
204.            return "Date";  
205.        }else if(sqlType.equalsIgnoreCase("number")){  
206.            return "Long";  
207.        }  
208.          
209.        return "String";  
210.    }  
211.      
212.    /** 
213.     * 出口 
214.     * TODO 
215.     * @param args 
216.     */  
217.    public static void main(String[] args) {  
218.          
219.        new GenEntityOracle();  
220.          
221.    }  
222.  
223.}

猜你喜欢

转载自zhengyunfei.iteye.com/blog/2114718