自动映射数据库中的字段,创建实体类 import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; /** * POJO Product * * @author Tumi 日期:2012-10-10 */ public class GenEntity { private static final String PACKAGENAME = "javaoop.petmarket.entity";// 实体类所在的包名 private static final String PATH = "E:\\SZ\\javaoop\\src\\javaoop\\petmarket\\entity\\";// 实体类文件所在的路径 private String[] tablenames = { "petOwner", "petStore", "pet", "account" };// 表名数组 private String[] colnames; // 列名数组 private String[] colTypes; // 列名类型数组 private int[] colSizes; // 列名大小数组 private boolean f_util = false; // 是否需要导入包java.util.* private boolean f_sql = false; // 是否需要导入包java.sql.* // 数据库连接 private static final ConfigManager config = ConfigManager.getInstance(); private static final String URL = config.getProperty("url"); private static final String NAME = config.getProperty("user"); private static final String PASS = config.getProperty("password"); private static final String DRIVER = config.getProperty("driverName"); /* * 构造函数 */ public GenEntity() { try { Class.forName(DRIVER); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } for (String tablename : tablenames) { // 创建连接 Connection con = null; // 查要生成实体类的表 String sql = "select * from " + tablename; PreparedStatement pStemt = null; try { con = DriverManager.getConnection(URL, NAME, PASS); pStemt = con.prepareStatement(sql); ResultSetMetaData rsmd = pStemt.getMetaData(); int size = rsmd.getColumnCount(); // 统计列 colnames = new String[size]; colTypes = new String[size]; colSizes = new int[size]; for (int i = 0; i < size; 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); } String content = parse(colnames, colTypes, colSizes,tablename); FileWriter fw = null; PrintWriter pw = null; try { fw = new FileWriter(PATH + initcap(tablename) + ".java"); pw = new PrintWriter(fw); pw.println(content); pw.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (pw != null) pw.close(); if (fw != null) fw.close(); } catch (Exception e) { e.printStackTrace(); } } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (pStemt != null) pStemt.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * 功能:生成实体类主体代码 * * @param colnames * @param colTypes * @param colSizes * @return */ private String parse(String[] colnames, String[] colTypes, int[] colSizes,String tablename) { StringBuffer sb = new StringBuffer(); sb.append("package " + PACKAGENAME + ";\r\n"); // 判断是否导入工具包 if (f_util) { sb.append("import java.util.Date;\r\n"); } if (f_sql) { sb.append("import java.sql.*;\r\n"); } sb.append("\r\n"); // 注释部分 sb.append(" /**\r\n"); sb.append(" * " + tablename + " 实体类\r\n"); sb.append(" * " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date() )); sb.append(" */ \r\n"); // 实体部分 sb.append("\r\n\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] + ";\r\n"); } } /** * 功能:生成所有方法 * * @param sb */ private void processAllMethod(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("\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"); } } /** * 功能:将输入字符串的首字母改成大写 * * @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.equalsIgnoreCase("bit")) { return "boolean"; } 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") || sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")) { return "double"; } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar") || sqlType.equalsIgnoreCase("text")) { return "String"; } else if (sqlType.equalsIgnoreCase("datetime")) { return "Date"; } else if (sqlType.equalsIgnoreCase("image")) { return "Blod"; } return null; } /** * 出口 TODO * * @param args */ public static void main(String[] args) { new GenEntity(); System.out.println("生成成功"); } }GenEntity.java
package Utils; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; /** * POJO Product * * @author Tumi 日期:2012-10-10 */ public class GenEntity { private static final String PACKAGENAME = "javaoop.petmarket.entity";// 实体类所在的包名 private static final String PATH = "E:\\SZ\\javaoop\\src\\javaoop\\petmarket\\entity\\";// 实体类文件所在的路径 private String[] tablenames = { "petOwner", "petStore", "pet", "account" };// 表名数组 private String[] colnames; // 列名数组 private String[] colTypes; // 列名类型数组 private int[] colSizes; // 列名大小数组 private boolean f_util = false; // 是否需要导入包java.util.* private boolean f_sql = false; // 是否需要导入包java.sql.* // 数据库连接 private static final ConfigManager config = ConfigManager.getInstance(); private static final String URL = config.getProperty("url"); private static final String NAME = config.getProperty("user"); private static final String PASS = config.getProperty("password"); private static final String DRIVER = config.getProperty("driverName"); /* * 构造函数 */ public GenEntity() { try { Class.forName(DRIVER); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } for (String tablename : tablenames) { // 创建连接 Connection con = null; // 查要生成实体类的表 String sql = "select * from " + tablename; PreparedStatement pStemt = null; try { con = DriverManager.getConnection(URL, NAME, PASS); pStemt = con.prepareStatement(sql); ResultSetMetaData rsmd = pStemt.getMetaData(); int size = rsmd.getColumnCount(); // 统计列 colnames = new String[size]; colTypes = new String[size]; colSizes = new int[size]; for (int i = 0; i < size; 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); } String content = parse(colnames, colTypes, colSizes,tablename); FileWriter fw = null; PrintWriter pw = null; try { fw = new FileWriter(PATH + initcap(tablename) + ".java"); pw = new PrintWriter(fw); pw.println(content); pw.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (pw != null) pw.close(); if (fw != null) fw.close(); } catch (Exception e) { e.printStackTrace(); } } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (pStemt != null) pStemt.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * 功能:生成实体类主体代码 * * @param colnames * @param colTypes * @param colSizes * @return */ private String parse(String[] colnames, String[] colTypes, int[] colSizes,String tablename) { StringBuffer sb = new StringBuffer(); sb.append("package " + PACKAGENAME + ";\r\n"); // 判断是否导入工具包 if (f_util) { sb.append("import java.util.Date;\r\n"); } if (f_sql) { sb.append("import java.sql.*;\r\n"); } sb.append("\r\n"); // 注释部分 sb.append(" /**\r\n"); sb.append(" * " + tablename + " 实体类\r\n"); sb.append(" * " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date() )); sb.append(" */ \r\n"); // 实体部分 sb.append("\r\n\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] + ";\r\n"); } } /** * 功能:生成所有方法 * * @param sb */ private void processAllMethod(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("\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"); } } /** * 功能:将输入字符串的首字母改成大写 * * @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.equalsIgnoreCase("bit")) { return "boolean"; } 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") || sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")) { return "double"; } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar") || sqlType.equalsIgnoreCase("text")) { return "String"; } else if (sqlType.equalsIgnoreCase("datetime")) { return "Date"; } else if (sqlType.equalsIgnoreCase("image")) { return "Blod"; } return null; } /** * 出口 TODO * * @param args */ public static void main(String[] args) { new GenEntity(); System.out.println("生成成功"); } }