根据数据库表结构生成 javaBean 。
这个功能以前一直使用 hibernate ,老觉得不方便,而且hibernate 生成的javabean 没有注释(估计是我不会配置)
所以就写了这么一个工具类,将 数据库中的表生成 javaBean .
package com.xxx.common; import java.io.File; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @createtime: 2012-10-19 下午03:29:35 * * @version: 将 表结构生成 实体类 */ public class CopyOfSqlFiledUtil { private static String srcDirectory = "c:/xxx/";// 存放.java源文件的目录 private static String classDirectory = "c:/xxx/class/";// 存放.class的目录 private static String classPackage = "com.xxx.entity";// 对应bean对象的包名 private static String driver = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=GBK"; private static String user = "xxx"; private static String pass = "xxx"; private static Set<String> columnTypeSet = new HashSet<String>(); private final static String decollator = "★"; // 分隔符 private static void init() { // 设置一个目录 File dir = new File(CopyOfSqlFiledUtil.srcDirectory); File dir2 = new File(CopyOfSqlFiledUtil.classDirectory); if (!dir.exists()) { dir.mkdir();// 如果这个目录不存在,则创建一个用来存入源文件 } if (!dir2.exists()) { dir2.mkdir();// 如果这个目录不存在,则创建一个用来存入源文件 } } private static void getJavaFile(String tableName, List<String> columnList) throws Exception { System.out.println("a::" + tableName); String columnName = ""; String zhushi = ""; String columnType = ""; String columnType4Obj = ""; if (columnList != null && !columnList.isEmpty()) { StringBuffer fileContent = new StringBuffer(); // 生成一个包 fileContent.append("package "); fileContent.append(CopyOfSqlFiledUtil.classPackage); fileContent.append(";\n\n"); // 生成类声明类这一行 fileContent.append("public class "); fileContent.append(tableName); fileContent.append(" implements java.io.Serializable {\n\n"); // 生成构造方法 // fileContent.append("\tprivate " + tableName + "(){\n"); // fileContent.append("\t}\n"); for (String columnMessage : columnList) { if (columnMessage != null && columnMessage.contains(decollator)) { String[] columns = columnMessage.split(decollator); columnName = columns[0]; zhushi = columns[1]; columnType = columns[2]; columnType4Obj = jdbc2objMap.get(columnType.toUpperCase()); // System.err.println("columnName="+columnName+" , zhushi="+zhushi+" , columnType="+columnType+" , columnType4Obj="+columnType4Obj); // 生成javaBean的私有属性 fileContent.append("\n\t private " + columnType4Obj + " "); fileContent .append(columnName.toString() + ";\t//" + zhushi); } } fileContent.append("\n"); fileContent.append("\n\n\n\t/*下面是取得属性值的get方法*/"); for (String columnMessage : columnList) { if (columnMessage != null && columnMessage.contains(decollator)) { String[] columns = columnMessage.split(decollator); columnName = columns[0]; zhushi = columns[1]; columnType = columns[2]; columnType4Obj = jdbc2objMap.get(columnType.toUpperCase()); // 生成get方法 fileContent.append("\n\t public "); fileContent.append(columnType4Obj); fileContent.append(" get"); fileContent.append(columnName.toString().substring(0, 1) .toUpperCase()); fileContent.append(columnName.toString().substring(1)); fileContent.append("(){\n"); fileContent.append("\t\t return this." + columnName.toString() + ";\n\t}"); // fileContent.append("\n"); } } // 生成set方法 fileContent.append("\n"); fileContent.append("\n\n\n\t/*下面是设置属性值的set方法*/"); for (String columnMessage : columnList) { if (columnMessage != null && columnMessage.contains(decollator)) { String[] columns = columnMessage.split(decollator); columnName = columns[0]; zhushi = columns[1]; columnType = columns[2]; columnType4Obj = jdbc2objMap.get(columnType.toUpperCase()); // 生成set方法 fileContent.append("\n\t public void set"); fileContent.append(columnName.toString().substring(0, 1) .toUpperCase()); fileContent.append(columnName.toString().substring(1)); fileContent.append("( " + columnType4Obj + "\t"); fileContent.append(columnName.toString()); fileContent.append(" ){\n"); fileContent.append("\t\tthis."); fileContent.append(columnName.toString()); fileContent.append("="); fileContent.append(columnName.toString()); fileContent.append(";\n\t}"); fileContent.append("\n"); } } fileContent.append("}"); // 形成一个.java文件 java.io.FileWriter file = new java.io.FileWriter( CopyOfSqlFiledUtil.srcDirectory + "/" + tableName + ".java"); file.write(fileContent.toString()); file.close(); file = null; // 编译成.class文件 String[] arg = new String[] { "-d", CopyOfSqlFiledUtil.classDirectory, CopyOfSqlFiledUtil.srcDirectory + "/" + tableName + ".java" }; com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main(); int statues = javac.compile(arg); System.out.println("OK" + statues); String className = CopyOfSqlFiledUtil.classPackage + "."; className += tableName; } } /** * 驼峰转化为 大写 xxCar 转换为 xx_car * * @param param * @return */ public static String camel4underline(String param) { Pattern p = Pattern.compile("[A-Z]"); if (param == null || param.equals("")) { return ""; } StringBuilder builder = new StringBuilder(param); Matcher mc = p.matcher(param); int i = 0; while (mc.find()) { builder.replace(mc.start() + i, mc.end() + i, "_" + mc.group().toLowerCase()); i++; } if ('_' == builder.charAt(0)) { builder.deleteCharAt(0); } return builder.toString(); } private static String changeStyle(String str, boolean toCamel) { if (str == null || str.isEmpty()) return str; if (toCamel) { String[] s = str.split("_"); String temp = ""; for (int i = 0; i < s.length; i++) { String m = s[i].substring(0, 1).toUpperCase() + s[i].substring(1); temp += m; } return temp; } else { return camel4underline(str); } } /** * * @param jdbcType * @return */ private static String switchIt(String jdbcType) { return jdbc2objMap.get(jdbcType); } /** * 得到某个表的所有字段信息 * * @param tableName * @param conn * @return xxx_source|状态|TINYINT * @throws Exception */ private static List<String> getColumnsByTableName(String tableName, Connection conn) throws Exception { List<String> columns = new ArrayList<String>(); ResultSet rSet = null; try { if (conn == null) { conn = getConnection(); } DatabaseMetaData dbms = conn.getMetaData(); rSet = dbms.getColumns(null, null, tableName, null); while (rSet.next()) { String columnName = rSet.getString("COLUMN_NAME"); String remark = rSet.getString("REMARKS"); String typeName = rSet.getString("TYPE_NAME"); columnTypeSet.add(typeName); // System.err.println(columnName + "|" + remark + "|" + // typeName); columns.add(columnName + decollator + remark + decollator + typeName); } return columns; } catch (Exception e) { e.printStackTrace(); throw e; } } /** * 得到 conn 数据库的 所有表名称 * * @param conn * @return * @throws Exception */ private static List<String> getAllTableName(Connection conn) throws Exception { List<String> tableNames = new ArrayList<String>(); ResultSet rSet = null; try { if (conn == null) { conn = getConnection(); } DatabaseMetaData dbms = conn.getMetaData(); rSet = dbms.getTables(null, null, null, null); while (rSet.next()) { // System.out.println("talbeName :" + rSet.getString(3)); String tableName = rSet.getString(3); tableNames.add(tableName); } return tableNames; } catch (Exception e) { e.printStackTrace(); throw e; } finally { if (rSet != null) { rSet.close(); } } } /** * 得到一个数据库连接 * * @return */ private static Connection getConnection() throws Exception { try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user,pass); return conn; } catch (Exception e) { e.printStackTrace(); throw e; } } private static Map<String, String> jdbc2objMap = new HashMap<String, String>(); static { jdbc2objMap.put("CHAR", "String"); jdbc2objMap.put("VARCHAR", "String"); jdbc2objMap.put("LONGVARCHAR", "String"); jdbc2objMap.put("TEXT", "String"); jdbc2objMap.put("NUMERIC", "java.math.BigDecimal"); jdbc2objMap.put("DECIMAL", "java.math.BigDecimal"); jdbc2objMap.put("BIT", "boolean"); jdbc2objMap.put("INT", "int"); jdbc2objMap.put("INT UNSIGNED", "int"); jdbc2objMap.put("TINYINT", "int"); jdbc2objMap.put("TINYINT UNSIGNED", "int"); jdbc2objMap.put("SMALLINT", "int"); jdbc2objMap.put("TINYINT UNSIGNED", "int"); jdbc2objMap.put("INTEGER", "int"); jdbc2objMap.put("INTEGER UNSIGNED", "int"); jdbc2objMap.put("BIGINT", "long"); jdbc2objMap.put("BIGINT UNSIGNED", "long"); jdbc2objMap.put("REAL", "float"); jdbc2objMap.put("FLOAT", "double"); jdbc2objMap.put("DOUBLE", "double"); jdbc2objMap.put("BINARY", "byte[]"); jdbc2objMap.put("VARBINARY", "byte[]"); jdbc2objMap.put("LONGVARBINARY", "byte[]"); jdbc2objMap.put("DATE", "java.util.Date"); jdbc2objMap.put("DATETIME", "java.util.Date"); jdbc2objMap.put("TIME", "java.util.Date"); jdbc2objMap.put("TIMESTAMP", "java.util.Date"); } public static void main(String[] args) throws Exception { Connection conn = null; try { init(); conn = getConnection(); List<String> tables = getAllTableName(conn); List<String> list = null; if(tables!=null && !tables.isEmpty()){ for(String table : tables){ if(table.startsWith("xxx_")){ list = getColumnsByTableName(table, conn); getJavaFile(changeStyle(table,true), list); } } } if(columnTypeSet!=null && !columnTypeSet.isEmpty()){ for (Iterator iterator = columnTypeSet.iterator(); iterator.hasNext();) { String string = (String) iterator.next(); System.err.println(string); } } //System.out.println(changeStyle("xxx", false)); } catch (Exception e) { } finally { conn.close(); } } }