由表生成java_根据数据表自动生成javaBean

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");

}

}


版权声明:本文为weixin_42514889原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。