小程序---根据数据库反向生成java文件
2016-08-16 15:02
429 查看
工作中写entry太繁琐,写了一个小程序反向生成。从而大大减少了工作量
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.SQLException; import java.util.ArrayList; import java.util.List; /** * @author weiwei.Wang * @date 2016年7月14日 * @todo TODO 根据DB name获取数据库中的table,从而生成java文件 * */ public class CreateBean { private String[] colnames; // 列名数组 private String[] colTypes; // 列名类型数组 private int[] colSizes; // 列名大小数组 private boolean f_util = false; // 是否需要导入包java.util.* private boolean f_sql = false; // 是否需要导入包java.sql.* private String url = "jdbc:mysql://127.0.0.1:3306/enrichmind"; private String user = "root"; private String pwd = ""; /** * 获取数据库连接 * * @return */ public Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, user, pwd); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 根据数据库名生成bean java文件 * * @param path * @throws Exception */ public void createBeanMethod(String DBName, String javaFileSavePath) throws Exception { // myDB为数据库名 List<String> tableList = getTableNameByDBname(DBName); for (int j = 0; j < tableList.size(); j++) { Connection conn = getConnection(); // 得到数据库连接 String tableName = tableList.get(j); String strsql = "select * from " + tableName; PreparedStatement pstmt = null; ResultSetMetaData rsmd = null; try { pstmt = conn.prepareStatement(strsql); rsmd = pstmt.getMetaData(); int size = rsmd.getColumnCount(); // 共有多少列 colnames = new String[size]; colTypes = new String[size]; colSizes = new int[size]; for (int i = 0; i < rsmd.getColumnCount(); 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, javaFileSavePath, tableName); try { FileWriter fw = new FileWriter(initcap(tableName) + ".java"); PrintWriter pw = new PrintWriter(fw); pw.println(content); pw.flush(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * 根据数据库名获取所有table * * @param DBname * @return */ public List<String> getTableNameByDBname(String DBname) { List<String> list = new ArrayList<String>(); try { Connection conn = getConnection(); DatabaseMetaData dmd = (DatabaseMetaData) conn.getMetaData(); ResultSet rs = dmd.getTables(null, null, "%", null); while (rs.next()) { // System.err.println("======"+ rs.getString("TABLE_NAME")); list.add(rs.getString("TABLE_NAME")); } } catch (SQLException e) { e.printStackTrace(); } return list; } /** * 解析处理(生成实体类主体代码) * * @throws Exception */ private String parse(String[] colNames, String[] colTypes, int[] colSizes, String path, String tableName) throws Exception { StringBuffer sb = new StringBuffer(); sb.append("import lombok.Data;\r\n"); if (f_util) { sb.append("\r\n"); sb.append("import java.util.Date;\r\n"); } if (f_sql) { sb.append("\r\n"); sb.append("import java.sql.*;\r\n\r\n\r\n"); } sb.append("@Data\r\n"); sb.append("public class " + initcap(tableName) + " extends AbstractEntity" + " {\r\n"); processAllAttrs(sb); // processAllMethod(sb); sb.append("}\r\n"); // 将string流写入文件 FileOperation.writeTxtFile(sb.toString(), new File(path + initcap(tableName) + ".java")); System.out.println(sb.toString()); return sb.toString(); } /** * 生成所有的方法 * * @param sb */ @SuppressWarnings("unused") 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("\t\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"); } } /** * 解析输出属性 * * @return */ private void processAllAttrs(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { sb.append("\r\n"); sb.append("\t@Column(name = \"" + colnames[i] + "\")\r\n"); sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\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); } /** * 将所有数据库中的字段类型转换为java中类型 * * @param sqlType * @return */ private String sqlType2JavaType(String sqlType) { if (sqlType.equalsIgnoreCase("bit")) { return "bool"; } 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")) { return "double"; } else if (sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")) { return "double"; } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")) { return "String"; } else if (sqlType.equalsIgnoreCase("datetime")) { return "Date"; } else if (sqlType.equalsIgnoreCase("image")) { return "Blob"; } else if (sqlType.equalsIgnoreCase("text")) { return "Clob"; } return null; } public static void main(String[] args) throws Exception { CreateBean createBean = new CreateBean(); String javaFileSavePath = "D:\\wer\\"; // String DBname = "enrichmind"; createBean.createBeanMethod(DBname, javaFileSavePath); } }
相关文章推荐
- 小程序---根据数据库反向生成java文件
- 小程序---根据数据库反向生成java文件
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- JAVA_WEB项目之在myecplise中如何利用DB Browser窗口连接mysql数据库之后根据表反向生成映射文件
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- 在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,根据hbm文件自动生成pojo和数据库脚本
- java小程序从数据库中(表)中读取数据然后创建文件夹生成txt文件
- 救火!各位大虾,怎样用JAVA程序读取excle文件或excle数据库,并插入到oracle数据库中,万分感谢
- eclipse中的Java文件自动根据svn版本号生成注释
- Eclipse java项目打包工具(fatjar)、Java EXE 启动文件生成程序
- Java程序如何生成mdb文件[MS Access]?
- 用POWER DESIGNER 生成MSYQL数据库反向工程(.sql-->pdm)及由pdm生成.sql文件
- 如何利用iText在java程序中生成PDF文件
- 3个java类:连接数据库类,获取文件后缀类,从数据库中读入数据生成XML文件
- java 根据URL生成mht文件,空白页面解决方案
- 如何根据hibernate的实体类和实体类配置文件生成数据库的表
- Java生成Excel文件通用程序