java代碼實現實體類的生成器

        有時候一個項目有幾十個表的時候,我們會花費很多時間在敲實體類的,寫一個實體類的生成器後只需要運行一下就可以了。並且這個生成器的原理也很簡單。首先從數據庫中獲取它所有的表,並對每一個表進行遍歷,根據相應的類型導入相應的包,使用stringbuffer進行數據的拼接,利用io寫入文件就可以實現生成了。話不多說了,直接上代碼:

package com.ljq;

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

import com.mysql.jdbc.ResultSet;

public class AutoModel {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "123456");
			PreparedStatement ps=conn.prepareStatement("SELECT TABLE_NAME from information_schema.`TABLES` where TABLE_SCHEMA = 'student';");
			ResultSet rs=(ResultSet) ps.executeQuery();
			while(rs.next()) {
				StringBuffer sb = new StringBuffer();
				StringBuffer sb1=new StringBuffer();
				sb.append("package com.ljq\r\n");
				sb.append("public class"+rs.getString(1)+"{\r\n");
				ps=conn.prepareStatement("desc "+rs.getString(1));
				ResultSet rs1=(ResultSet) ps.executeQuery();
				boolean dateFlag=true;
				while(rs1.next()) {
					String name=rs1.getString(1);
					String type=rs1.getString(2);
					if(type.contains("int")||type.contains("bigInt")) {
						type="int";
					}else if(type.contains("varchar")||type.contains("text")) {
						type="String";
					}else if(type.contains("date")||type.contains("datetime")) {
						//標識用以只增加一次
						if(dateFlag) {
							int a=sb.indexOf("\n");
							sb.insert(a, "import java.util.Date");
							dateFlag=false;
						}
						type="Date";
					}
					sb.append("private "+type+" "+name+";\r\n");
					sb1.append("\r\npublic void set"+name.replace(name.substring(0, 1), name.substring(0,1).toUpperCase())+
							"("+type+" "+name+"){\r\n");
					sb1.append("this."+name+"="+name+";\r\n}\r\n");
					sb1.append("public "+type+" get"+name.replace(name.substring(0, 1), name.substring(0,1).toUpperCase())
					+"(){\r\n"+"return "+name+";\r\n}");
				}
				sb1.append("\r\n}");
				String model=sb.toString()+sb1.toString();
				System.out.println(model);
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}


以上不是特別的完善,剩餘的以此類推。比較值得注意的是:

SELECT TABLE_NAME from information_schema.`TABLES` where TABLE_SCHEMA = 'student';
這一句是把student數據庫中的所有表名查出。

desc rs.getString(1)
這一句是把相應表的細節查出,然後進行類型的匹配。

在此,我比沒有把得到的數據存到相應的文件中。

以下是代碼的輸出:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章