mysql数据反射给实体类_java 从数据库表反射出实体类,自动生成实体类

01.packagecom.db.gen.entity.tool;02.03.04.importjava.io.File;05.importjava.io.FileWriter;06.importjava.io.IOException;07.importjava.io.PrintWriter;08.importjava.sql.Connection;09.importjava.sql.DriverManager;10.importjava.sql.PreparedStatement;11.importjava.sql.ResultSet;12.importjava.sql.ResultSetMetaData;13.importjava.sql.SQLException;14.importjava.sql.Statement;15.importjava.util.Date;16.17.public classGenEntityOracle {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. publicGenEntityOracle(){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 = newString[size];56. colTypes = newString[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 = newFileWriter(outputPath);84. PrintWriter pw = newPrintWriter(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. *@paramcolnames

107. *@paramcolTypes

108. *@paramcolSizes

109. *@return110.*/

111. private String parse(String[] colnames, String[] colTypes, int[] colSizes) {112. StringBuffer sb = newStringBuffer();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. returnsb.toString();136. }137.138. /**139. * 功能:生成所有属性

140. *@paramsb

141.*/

142. private voidprocessAllAttrs(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. *@paramsb

153.*/

154. private voidprocessAllMethod(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. *@paramstr

171. *@return172.*/

173. privateString 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 newString(ch);181. }182.183. /**184. * 功能:获得列的数据类型

185. *@paramsqlType

186. *@return187.*/

188. privateString 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. *@paramargs

216.*/

217. public static voidmain(String[] args) {218.219. newGenEntityOracle();220.221. }222.223.}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值