packagefanshe;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DatabaseMetaData;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.util.ArrayList;importjava.util.List;/*** 根据数据库表结构 自动生成java Bean
*
*@authorDLHT 2016年3月4日下午5:00:28 AutoCreateClass.java DLHT*/
public classAutoCreateBean {//mysql 驱动类
private static final String DRIVER = "com.mysql.jdbc.Driver";//数据库登录用户名
private static final String USER = "root";//数据库登录密码
private static final String PASSWORD = "20110725";//数据库连接地址
private static final String URL = "jdbc:mysql://localhost:3306/networkflow";private staticString tablename;private String[] colnames; //列名数组
private String[] colTypes; //列名类型数组
private int[] colSizes; //列名大小数组
private boolean f_util = false; //是否需要导入包java.util.*
private boolean f_sql = false; //是否需要导入包java.sql.*
/*** 获取指定数据库中包含的表 TBlist
*
* @time 2016年3月4日下午5:54:52
* @packageName com.util
*@return返回所有表名(将表名放到一个集合中)
*@throwsException*/
public List TBlist() throwsException {//访问数据库 采用 JDBC方式
Class.forName(DRIVER);
Connection con=DriverManager.getConnection(URL, USER, PASSWORD);
DatabaseMetaData md=con.getMetaData();
List list = null;
ResultSet rs= md.getTables(null, null, null, null);if (rs != null) {
list= new ArrayList();
}while(rs.next()) {//System.out.println("|表" + (i++) + ":" + rs.getString("TABLE_NAME"));
String tableName = rs.getString("TABLE_NAME");
list.add(tableName);
}
rs= null;
md= null;
con= null;returnlist;
}public void GenEntity(List TBlist, String packageName)throwsException {
Connection conn= null;
PreparedStatement pstmt= null;
ResultSetMetaData rsmd= null;//访问数据库 采用 JDBC方式
Class.forName(DRIVER);
conn=DriverManager.getConnection(URL, USER, PASSWORD);for (int k = 0; k < TBlist.size(); k++) {
tablename=TBlist.get(k);
String strsql= "select * from " +tablename;
pstmt=conn.prepareStatement(strsql);
rsmd=pstmt.getMetaData();int size =rsmd.getColumnCount();//共有多少列
colnames = newString[size];
colTypes= newString[size];
colSizes= new int[size];for (int i = 0; i < rsmd.getColumnCount(); 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);
}
markerBean(initcap(tablename), parse(), packageName);
}
pstmt= null;
rsmd= null;
conn= null;
}/*** 解析处理(生成实体类主体代码)*/
privateString parse() {
StringBuffer sb= newStringBuffer();if(f_util) {
sb.append("import java.util.Date;\r\n");
}if(f_sql) {
sb.append("import java.sql.*;\r\n\r\n\r\n");
}
sb.append("public class " + initcap(tablename) + " {\r\n");
processAllAttrs(sb);
processAllMethod(sb);
sb.append("}\r\n");returnsb.toString();
}/*** 创建java 文件 将生成的属性 get/set 方法 保存到 文件中 markerBean
*
* @time 2015年9月29日下午4:15:22
* @packageName fanshe
*@paramclassName
* 类名称
*@paramcontent
* 类内容 包括属性 getset 方法*/
public voidmarkerBean(String className, String content, String packageName) {
String folder= System.getProperty("user.dir") + "/src/" + packageName + "/";
File file= newFile(folder);if (!file.exists()) {
file.mkdirs();
}
String fileName= folder + className + ".java";try{
File newdao= newFile(fileName);
FileWriter fw= newFileWriter(newdao);
fw.write("package\t" + packageName.replace("/", ".") + ";\r\n");
fw.write(content);
fw.flush();
fw.close();
}catch(IOException e) {
e.printStackTrace();
}
}/*** 生成所有的方法
*
*@paramsb*/
private voidprocessAllMethod(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("\t\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");
}
}/*** 解析输出属性
*
*@return
*/
private voidprocessAllAttrs(StringBuffer sb) {for (int i = 0; i < colnames.length; i++) {
sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n");
}
}/*** 把输入字符串的首字母改成大写
*
*@paramstr
*@return
*/
privateString initcap(String str) {char[] ch =str.toCharArray();if (ch[0] >= 'a' && ch[0] <= 'z') {
ch[0] = (char) (ch[0] - 32);
}return newString(ch);
}privateString sqlType2JavaType(String sqlType) {if (sqlType.equalsIgnoreCase("bit")) {return "bool";
}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")) {return "double";
}else if (sqlType.equalsIgnoreCase("money")|| sqlType.equalsIgnoreCase("smallmoney")) {return "double";
}else if (sqlType.equalsIgnoreCase("varchar")|| sqlType.equalsIgnoreCase("char")|| sqlType.equalsIgnoreCase("nvarchar")|| sqlType.equalsIgnoreCase("nchar")) {return "String";
}else if (sqlType.equalsIgnoreCase("datetime")||sqlType.equalsIgnoreCase("date")){return "Date";
}else if (sqlType.equalsIgnoreCase("image")) {return "Blob";
}else if (sqlType.equalsIgnoreCase("text")) {return "Clob";
}return null;
}public static void main(String[] args) throwsException {
AutoCreateBean auto= newAutoCreateBean();
List list =auto.TBlist();
auto.GenEntity(list,"com/bean");
}
}