根據表生成實體類的工具類
阿新 • • 發佈:2018-12-24
package com.zsf.shenzhou.customer.po; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.RowId; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class util { private String authorName = "史先鋒";//作者名字 private String[] colnames; // 列名陣列 private String[] colTypes; //列名型別陣列 private String[] colComment; //列名註釋陣列 private int[] colSizes; //列名大小陣列 private boolean f_util = false; // 是否需要匯入包java.util.* private boolean f_sql = false; // 是否需要匯入包java.sql.* public static List<String> TBlist() throws SQLException { List list = null; Connection con = JDBCUtils.getConnection(); String sql="select table_name from information_schema.tables where table_schema='xianfengdb'"; PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); if (rs != null) { list = new ArrayList(); } while (rs.next()) { String tableName = rs.getString("table_name"); list.add(tableName); } JDBCUtils.colseResource(con, ps, rs); return list; } /* * 建構函式 */ public void GenEntityMysql(String tablename,String packageOutPath) throws SQLException{ //建立連線 Connection con = JDBCUtils.getConnection(); //查要生成實體類的表 String sql = "SELECT COLUMN_NAME,COLUMN_TYPE,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name=" + "'"+tablename+"'"; PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); int size = getColumnSize(tablename); colnames = new String[size]; colTypes = new String[size]; colSizes = new int[size]; colComment= new String[size]; int i=0; while (rs.next()) { String column_name = rs.getString("column_name"); colnames[i]=column_name; String column_type = rs.getString("column_type"); System.out.println("+----"+column_type); colTypes[i]=column_type; if(colTypes[i].equalsIgnoreCase("datetime")){ f_util = true; } if(colTypes[i].equalsIgnoreCase("image") || colTypes[i].equalsIgnoreCase("text")){ f_sql = true; } String column_comment = rs.getString("column_comment"); colComment[i]=column_comment; System.out.println("+----"+column_comment); colSizes[i]=1; i++; } JDBCUtils.colseResource(con, ps, rs); String tableComment= getTableCommentByTName(tablename); String content = parse(tableComment,colnames,colTypes,colSizes,tablename,packageOutPath); try { File directory = new File(""); 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/main/java/"+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(); } } /** * 功能:生成實體類主體程式碼 * @param colnames * @param colTypes * @param colSizes * @return */ private String parse(String tablecomment,String[] colnames, String[] colTypes, int[] colSizes,String tablename,String packageOutPath) { StringBuffer sb = new StringBuffer(); //判斷是否匯入工具包 if(f_util){ sb.append("import java.util.Date;\r\n"); } if(f_sql){ sb.append("import java.sql.*;\r\n"); } sb.append("package " + packageOutPath + ";\r\n"); sb.append("\r\n"); //註釋部分 sb.append(" /**\r\n"); sb.append(" * "+tablename+ "("+tablecomment+"-->) 實體類\r\n"); sb.append(" * "+date2String(new Date())+" By "+this.authorName+"\r\n"); sb.append(" */ \r\n"); //實體部分 sb.append("\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] +"; //"+colComment[i]+ "\r\n"); } } /** * 功能:生成所有方法 * @param sb */ private void processAllMethod(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { sb.append("\t/**\r\n\t\t*設定"+colComment[i]+"的方法\r\n\t\t*@param 型別 "+sqlType2JavaType(colTypes[i])+"\r\n\t*/\r\n"); 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("\t/**\r\n\t\t*返回"+colComment[i]+"的方法\r\n\t\t*返回型別"+sqlType2JavaType(colTypes[i])+"\r\n\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.contains("bit")){ return "boolean"; }else if(sqlType.contains("byte")){ return "byte"; }else if(sqlType.contains("smallint")){ return "short"; }else if(sqlType.contains("int")){ return "int"; }else if(sqlType.contains("bigint")){ return "long"; }else if(sqlType.contains("float")){ return "float"; }else if(sqlType.contains("decimal") || sqlType.contains("numeric") || sqlType.contains("real") || sqlType.contains("money") || sqlType.contains("smallmoney")){ return "double"; }else if(sqlType.contains("varchar") || sqlType.contains("char") || sqlType.contains("nvarchar") || sqlType.contains("nchar") || sqlType.contains("text")){ return "String"; }else if(sqlType.contains("datetime")){ return "Date"; }else if(sqlType.contains("image")){ return "Blod"; } return null; } public int getColumnSize(String tablename) throws SQLException{ //建立連線 Connection con = JDBCUtils.getConnection(); //查要生成實體類的表 String sql = "select COLUMN_NAME,count(*) total from INFORMATION_SCHEMA.Columns WHERE table_name=" + "'"+tablename+"'"; PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()){ return rs.getInt("total"); } JDBCUtils.colseResource(con, ps, rs); return 1; } /** * 根據表名獲取註釋 * @throws SQLException */ public String getTableCommentByTName(String tablename) throws SQLException{ //建立連線 Connection con = JDBCUtils.getConnection(); //查要生成實體類的表 String sql = "SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES where TABLE_NAME= " + "'"+tablename+"'"; PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()){ return rs.getString("table_comment"); } JDBCUtils.colseResource(con, ps, rs); return null; } public static String date2String(Date date){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formatDate = simpleDateFormat.format(date); return formatDate; } /** * 出口 * TODO * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { //Customer customer=new Customer(); List<String> tBlist = TBlist(); for(String tablename:tBlist){ new util().GenEntityMysql(tablename,"com.zsf.shenzhou.customer.po");; } System.out.println(); } }
package com.zsf.shenzhou.customer.po; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public final class JDBCUtils { private static String driver="com.mysql.jdbc.Driver"; private static String url="jdbc:mysql://54.222.250.141:3306/xianfengDB?useUnicode=true&characterEncoding=UTF-8"; private static String user="root"; private static String password="123456"; private JDBCUtils(){} static { /** * 驅動註冊 */ try { Class.forName(driver); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } /** * 獲取 Connetion * @return * @throws SQLException */ public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, user, password); } /** * 釋放資源 * @param conn * @param st * @param rs */ public static void colseResource(Connection conn,PreparedStatement ps,ResultSet rs) { closeResultSet(rs); closePreparedStatement(ps); closeConnection(conn); } /** * 釋放連線 Connection * @param conn */ public static void closeConnection(Connection conn) { if(conn !=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } //等待垃圾回收 conn = null; } /** * 釋放語句執行者 Statement * @param st */ public static void closePreparedStatement(PreparedStatement ps) { if(ps !=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } //等待垃圾回收 ps = null; } /** * 釋放結果集 ResultSet * @param rs */ public static void closeResultSet(ResultSet rs) { if(rs !=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } //等待垃圾回收 rs = null; } }