java jdbc生成带注释的实体类(model)

使用java jdbc生成带注释的实体类(model),只要导入mysql的jar包,执行下面的代码,(setter和getter还未生成)

代码如下:

package com.test;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 
 *
 *
类名:MySQLModelGenerator.java
 *
描述: 从mysql表生成model带注释 
   *
创建时间: Aug 8, 2017 2:18:05 PM
 *
创建人: Caigen
 *
版本历史: 
 * 
 * Date         Author      Version     Description 
 * ------------------------------------------------------------------ 
 * Aug 8, 2017 2:18:05 PM    Caigen       1.0        1.0 Version 
 * 
 *
 */ public class MySQLModelGenerator { // model生成的路径 private static String DIR="d:/model/"; // 连接的数据库 private static String DBNAME="sale_manage"; // 数据库用户名 private static String DBUSER="root"; // 数据库密码 private static String DBPWD="root"; // 存储临时信息 private static Map params = new HashMap(); public static Connection getMySQLConnection()  { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+DBNAME, DBUSER, DBPWD); return conn; } catch (Exception e) { e.printStackTrace(); } return null; } /**  * 获取当前数据库下的所有表名称  * @return  * @throws Exception  */ public static List getAllTableName() throws Exception { List tables = new ArrayList(); Connection conn = getMySQLConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SHOW TABLES "); while (rs.next()) { String tableName = rs.getString(1); tables.add(tableName); } rs.close(); stmt.close(); conn.close(); return tables; } /**  * 获得某表的建表语句  * @param tableName  * @return  * @throws Exception  */ public static Map getCommentByTableName(List tableName) throws Exception { Map map = new HashMap(); Connection conn = getMySQLConnection(); Statement stmt = conn.createStatement(); for (int i = 0; i < tablename.size(); i++) { string table =" (String) tableName.get(i);" resultset rs =" stmt.executeQuery("SHOW CREATE TABLE " + table);" if (rs !=" null && rs.next()) {" string createddl =" rs.getString(2);" string comment =" parse(createDDL);" map.put(table, comment);="" }="" rs.close();="" stmt.close();="" conn.close();="" return map;="" **=""  * 获得某表中所有字段的注释=""  * @param tablename=""  * @return=""  * @throws exception=""  *="" public static void getcolumncommentbytablename(list tablename) throws exception {="" map map = new HashMap(); Connection conn = getMySQLConnection(); Statement stmt = conn.createStatement(); for (int i = 0; i < tablename.size(); i++) { string table =" (String) tableName.get(i);" resultset rs =" stmt.executeQuery("show full columns from " + table);" while (rs.next()) {  =""     ="" map.put(rs.getstring("field"), rs.getstring("comment"));="" }  =""     params.put(table+"_comment", map);="" rs.close();="" }="" stmt.close();="" conn.close();="" **=""  * 返回注释信息=""  * @param all=""  * @return=""  *="" public static string parse(string all) {="" string comment =" null;" int index =" all.indexOf("COMMENT='");" if (index < 0) {="" return "";="" comment =" all.substring(index + 9);" return comment;=""  ="" public static string upcase(string field, boolean classname){="" string\[\] strings="field.split("_");" stringbuffer buffer =" new StringBuffer();" for (int i =" 0; i < strings.length; i++) {" string str="strings\[i\];" if(i="=0){" if(classname="=true){" buffer.append(str.substring(0, 1).touppercase()).append(str.substring(1));=""  }else{=""  buffer.append(str);=""  } ="" }else{="" return buffer.tostring();=""  * 类型转换=""  * @param type="" public static string changetype(string type){="" if(type.equals("java.sql.timestamp")){="" return "date";="" if(type.equals("java.math.bigdecimal")){="" return "bigdecimal";="" if(type.equals("java.lang.string")){="" return "string";="" if(type.equals("java.lang.long")){="" return "long";="" if(type.equals("java.lang.integer")){="" return "integer";="" return null;="" public static string formatjava(string name, string desc, map type, Map comment){ StringBuffer buffer = new StringBuffer(); String br=" "; buffer.append("package com.test;") .append(br) .append(br) .append("import java.io.Serializable;") .append(br) .append("import java.util.Date;") .append(br) .append(br) .append("/**") .append(br) .append(" * ") .append(desc) .append(br) .append(" */") .append(br) .append("public class "+ UpCase(name,true)) .append(" implements Serializable{") .append(br); for (Iterator iterator = type.keySet().iterator(); iterator.hasNext();) { String field = (String) iterator.next(); buffer.append("    //") .append(comment.get(field)) .append(br); buffer.append("    private ") .append( changeType(type.get(field)) ) .append(" ") .append( UpCase(field, false) ) .append(";") .append(br); } return buffer.toString(); } @SuppressWarnings("unchecked") public static void main(String\[\] args) throws Exception { List tables = getAllTableName(); Map tablesComment = getCommentByTableName(tables); Set names = tablesComment.keySet(); Iterator iter = names.iterator(); while (iter.hasNext()) { String name = (String) iter.next(); // System.out.println("Table Name: " + name + ", Comment: " + tablesComment.get(name)); // System.out.println("Table Name: " + name    ); getFieldType(name);  } getColumnCommentByTableName(tables); //  iter = names.iterator(); while (iter.hasNext()) { String name = (String) iter.next(); Map map=(Map) params.get(name); Map map\_comment=(Map) params.get(name+"\_comment"); String reString=formatJava(name, tablesComment.get(name).toString(), map, map_comment); System.out.println(reString); System.out.println("-------------------------"); } } public static void getFieldType(String table){ Connection conn = getMySQLConnection(); Map map = new HashMap();     PreparedStatement pst = null;     try {       pst = conn.prepareStatement("select * from "+table+" where 1=2");       ResultSetMetaData rsd = pst.executeQuery().getMetaData();       for(int i = 0; i < rsd.getcolumncount(); i++) {         system.out.print("java类型:"+rsd.getcolumnclassname(i + 1));=""         system.out.print("  数据库类型:"+rsd.getcolumntypename(i + 1));=""         system.out.print("  字段名称:"+rsd.getcolumnname(i + 1));=""         system.out.print("  字段长度:"+rsd.getcolumndisplaysize(i + 1)); =""         system.out.println();=""         map.put(rsd.getcolumnname(i+1), rsd.getcolumnclassname(i + 1));=""       }=""       params.put(table, map);=""     } catch(sqlexception e) {=""       throw new runtimeexception(e);=""     } finally {=""       try {=""         pst.close();=""         pst =" null;"       } catch(sqlexception e) {=""         throw new runtimeexception(e);=""     }="" }="" <="" pre="">

0%