本文轉自:http://blog.csdn.net/goodleiwei/article/details/8439023
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.ResultSetMetaData; 12.import java.sql.SQLException; 13.import java.util.Date; 14. 15.public class GenEntityMysql { 16. 17. private String packageOutPath = "com.user.entity";//指定實體生成所在包的路徑 18. private String authorName = "封狼居胥";//作者名字 19. private String tablename = "user";//表名 20. private String[] colnames; // 列名數組 21. private String[] colTypes; //列名類型數組 22. private int[] colSizes; //列名大小數組 23. private boolean f_util = false; // 是否需要導入包java.util.* 24. private boolean f_sql = false; // 是否需要導入包java.sql.* 25. 26. //數據庫連接 27. private static final String URL ="jdbc:mysql://localhost:3306/jbpm"; 28. private static final String NAME = "root"; 29. private static final String PASS = "root"; 30. private static final String DRIVER ="com.mysql.jdbc.Driver"; 31. 32. /* 33. * 構造函數 34. */ 35. public GenEntityMysql(){ 36. //創建連接 37. Connection con; 38. //查要生成實體類的表 39. String sql = "select * from " + tablename; 40. PreparedStatement pStemt = null; 41. try { 42. try { 43. Class.forName(DRIVER); 44. } catch (ClassNotFoundException e1) { 45. // TODO Auto-generated catch block 46. e1.printStackTrace(); 47. } 48. con = DriverManager.getConnection(URL,NAME,PASS); 49. pStemt = con.prepareStatement(sql); 50. ResultSetMetaData rsmd = pStemt.getMetaData(); 51. int size = rsmd.getColumnCount(); //統計列 52. colnames = new String[size]; 53. colTypes = new String[size]; 54. colSizes = new int[size]; 55. for (int i = 0; i < size; i++) { 56. colnames[i] = rsmd.getColumnName(i + 1); 57. colTypes[i] = rsmd.getColumnTypeName(i + 1); 58. 59. if(colTypes[i].equalsIgnoreCase("datetime")){ 60. f_util = true; 61. } 62. if(colTypes[i].equalsIgnoreCase("image") || colTypes[i].equalsIgnoreCase("text")){ 63. f_sql = true; 64. } 65. colSizes[i] = rsmd.getColumnDisplaySize(i + 1); 66. } 67. 68. String content = parse(colnames,colTypes,colSizes); 69. 70. try { 71. File directory = new File(""); 72. //System.out.println("絕對路徑:"+directory.getAbsolutePath()); 73. //System.out.println("相對路徑:"+directory.getCanonicalPath()); 74. String path=this.getClass().getResource("").getPath(); 75. 76. System.out.println(path); 77. System.out.println("src/?/"+path.substring(path.lastIndexOf("/com/", path.length())) ); 78.// String outputPath = directory.getAbsolutePath()+ "/src/"+path.substring(path.lastIndexOf("/com/", path.length()), path.length()) + initcap(tablename) + ".java"; 79. String outputPath = directory.getAbsolutePath()+ "/src/"+this.packageOutPath.replace(".", "/")+"/"+initcap(tablename) + ".java"; 80. FileWriter fw = new FileWriter(outputPath); 81. PrintWriter pw = new PrintWriter(fw); 82. pw.println(content); 83. pw.flush(); 84. pw.close(); 85. } catch (IOException e) { 86. e.printStackTrace(); 87. } 88. 89. } catch (SQLException e) { 90. e.printStackTrace(); 91. } finally{ 92.// try { 93.// con.close(); 94.// } catch (SQLException e) { 95.// // TODO Auto-generated catch block 96.// e.printStackTrace(); 97.// } 98. } 99. } 100. 101. /** 102. * 功能:生成實體類主體代碼 103. * @param colnames 104. * @param colTypes 105. * @param colSizes 106. * @return 107. */ 108. private String parse(String[] colnames, String[] colTypes, int[] colSizes) { 109. StringBuffer sb = new StringBuffer(); 110. 111. //判斷是否導入工具包 112. if(f_util){ 113. sb.append("import java.util.Date;\r\n"); 114. } 115. if(f_sql){ 116. sb.append("import java.sql.*;\r\n"); 117. } 118. sb.append("package " + this.packageOutPath + ";\r\n"); 119. sb.append("\r\n"); 120. //注釋部分 121. sb.append(" /**\r\n"); 122. sb.append(" * "+tablename+" 實體類\r\n"); 123. sb.append(" * "+new Date()+" "+this.authorName+"\r\n"); 124. sb.append(" */ \r\n"); 125. //實體部分 126. sb.append("\r\n\r\npublic class " + initcap(tablename) + "{\r\n"); 127. processAllAttrs(sb);//屬性 128. processAllMethod(sb);//get set方法 129. sb.append("}\r\n"); 130. 131. //System.out.println(sb.toString()); 132. return sb.toString(); 133. } 134. 135. /** 136. * 功能:生成所有屬性 137. * @param sb 138. */ 139. private void processAllAttrs(StringBuffer sb) { 140. 141. for (int i = 0; i < colnames.length; i++) { 142. sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n"); 143. } 144. 145. } 146. 147. /** 148. * 功能:生成所有方法 149. * @param sb 150. */ 151. private void processAllMethod(StringBuffer sb) { 152. 153. for (int i = 0; i < colnames.length; i++) { 154. sb.append("\tpublic void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " " + 155. colnames[i] + "){\r\n"); 156. sb.append("\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n"); 157. sb.append("\t}\r\n"); 158. sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){\r\n"); 159. sb.append("\t\treturn " + colnames[i] + ";\r\n"); 160. sb.append("\t}\r\n"); 161. } 162. 163. } 164. 165. /** 166. * 功能:將輸入字符串的首字母改成大寫 167. * @param str 168. * @return 169. */ 170. private String initcap(String str) { 171. 172. char[] ch = str.toCharArray(); 173. if(ch[0] >= 'a' && ch[0] <= 'z'){ 174. ch[0] = (char)(ch[0] - 32); 175. } 176. 177. return new String(ch); 178. } 179. 180. /** 181. * 功能:獲得列的數據類型 182. * @param sqlType 183. * @return 184. */ 185. private String sqlType2JavaType(String sqlType) { 186. 187. if(sqlType.equalsIgnoreCase("bit")){ 188. return "boolean"; 189. }else if(sqlType.equalsIgnoreCase("tinyint")){ 190. return "byte"; 191. }else if(sqlType.equalsIgnoreCase("smallint")){ 192. return "short"; 193. }else if(sqlType.equalsIgnoreCase("int")){ 194. return "int"; 195. }else if(sqlType.equalsIgnoreCase("bigint")){ 196. return "long"; 197. }else if(sqlType.equalsIgnoreCase("float")){ 198. return "float"; 199. }else if(sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric") 200. || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money") 201. || sqlType.equalsIgnoreCase("smallmoney")){ 202. return "double"; 203. }else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") 204. || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar") 205. || sqlType.equalsIgnoreCase("text")){ 206. return "String"; 207. }else if(sqlType.equalsIgnoreCase("datetime")){ 208. return "Date"; 209. }else if(sqlType.equalsIgnoreCase("image")){ 210. return "Blod"; 211. } 212. 213. return null; 214. } 215. 216. /** 217. * 出口 218. * TODO 219. * @param args 220. */ 221. public static void main(String[] args) { 222. 223. new GenEntityMysql(); 224. 225. } 226. 227.}
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.}
通過改造可以實現mysql和oracle的了