importorg.apache.commons.lang.StringUtils;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;import java.util.*;public classDBTableToJavaBeanUtil {public staticConnection connection;//mysql DB连接字符串
private static String DB_URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&noDatetimeStringSync=true&serverTimezone=UTC";private static String DB_USER = "root"; //账号
private static String DB_PASSWD = "root"; //密码//mysql 驱动全限定名称
public static String DB_DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";static{try{
Class.forName(DB_DRIVER_CLASS_NAME);if (connection == null ||connection.isClosed())//获得链接
connection =DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWD);
}catch(ClassNotFoundException ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
}catch(SQLException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}publicDBTableToJavaBeanUtil(){
}/*** 表元数据
*@paramtable
*@return
*/
public static MapgetDBTableMeta(String table){
Map colAndTypes = newHashMap();
String sql= "select * from " +table;try{
PreparedStatement statement=connection.prepareStatement(sql);//表 元数据
ResultSetMetaData metadata =statement.getMetaData();//表 列
int len =metadata.getColumnCount();for(int i= 1;i<= len; i++){
colAndTypes.put(metadata.getColumnName(i), sqlType2JavaType(metadata.getColumnTypeName(i)));
}
}catch(SQLException e) {
e.printStackTrace();
}returncolAndTypes;
}/*** sql type <=> java type
*@paramsqlType
*@return
*/
public staticString sqlType2JavaType(String sqlType) {switch(sqlType.toLowerCase()){case "bit": return "boolean";case "tinyint": return "byte";case "smallint": return "short";case "int": return "int";case "bigint": return "long";case "float": return "float";case "decimal":case "numeric":case "real":case "money":case "smallmoney": return "double";case "varchar":case "char":case "nvarchar":case "nchar":case "text": return "String";case "datetime":case "date": return "Date";case "image": return "Blob";case "timestamp": return "Timestamp";default: return "String";
}
}/*** table 2 class
*@paramtable 表名称
*@parampath 保存类文件路径*/
public staticString tableToClass(String table, String path, String pack){
Map colAndTypes =getDBTableMeta(table);//类字符串
StringBuilder classStr = newStringBuilder();if(colAndTypes.size() == 0) return "";if(!isEmpty(pack)){
classStr.append("package " + pack + ";");
}
classStr.append(genImport(colAndTypes.values()));//驼峰bean名称
classStr.append("public class " + dealName(table, 1) + " {\r\n");//类字段
for (Map.Entryentry : colAndTypes.entrySet()) {
classStr.append(genFieldStr(entry.getKey(), entry.getValue()));
}//get,Set
for (Map.Entryentry : colAndTypes.entrySet()) {
classStr.append(genGetMethodStr(entry.getKey(), entry.getValue()));
classStr.append(genSetMethodStr(entry.getKey(), entry.getValue()));
}
classStr.append("}\r\n");//保存
path = isEmpty(path)?"":path;
File file= new File(path + dealName(table, 1) + ".java");try(BufferedWriter write = new BufferedWriter(newFileWriter(file))) {
write.write(classStr.toString());
write.close();
}catch(IOException e) {
e.printStackTrace();
}returnclassStr.toString();
}public static String genImport(Collectiontypes){
StringBuilder sb= newStringBuilder();if(types.contains("Date")){
sb.append("import java.util.Date;\r\n");
}if(types.contains("Blob")){
sb.append("import java.sql.Blob;\r\n");
}if(types.contains("Timestamp")){
sb.append("import java.sql.Timestamp;\r\n");
}returnsb.toString();
}/*** 属性构造
*@paramname
*@paramtype
*@return
*/
public staticString genFieldStr(String name, String type) {if(isEmpty(name) ||isEmpty(type)) {return "";
}return String.format(" private %s %s;\n\r", new String[]{type, dealName(name, 0)});
}public static booleanisEmpty(String str){if(str == null || str == "") return true;return false;
}/*** get method construct
*@paramname
*@paramtype
*@return
*/
private staticString genGetMethodStr(String name, String type) {if(isEmpty(name) ||isEmpty(type)) {return "";
}
StringBuilder sb= newStringBuilder();
sb.append(String.format(" public %s get%s(){\n\r", type, dealName(name, 1)));
sb.append(String.format(" return this.%s;\r\n", dealName(name, 0)));
sb.append(" }\r\n");returnsb.toString();
}/*** 驼峰名称处理
*@paramname
*@paramtype
*@return
*/
public static String dealName(String name, inttype) {
String[] names= StringUtils.split(StringUtils.trim(name), "_");if(names.length > 0){
StringBuilder sb= newStringBuilder();for(String s : names) {
sb.append(StringUtils.upperCase(StringUtils.substring(s,0, 1)));
sb.append(StringUtils.lowerCase(StringUtils.substring(s,1)));
}if(type == 0){
sb.replace(0, 1, StringUtils.lowerCase(sb.substring(0, 1)));
}returnsb.toString();
}return "";
}/*** set method contruct
*@paramname
*@paramtype
*@return
*/
public staticString genSetMethodStr(String name, String type) {if(isEmpty(name) ||isEmpty(type)) {return "";
}
String fieldName= dealName(name, 0);
StringBuilder sb= newStringBuilder();
sb.append(String.format(" public void set%s(%s %s){\n\r", dealName(name, 1), type, fieldName));
sb.append(String.format(" this.%s = %s;\r\n", fieldName, fieldName));
sb.append(" }\r\n");returnsb.toString();
}public static voidclose(){try{
connection.close();
}catch(SQLException e) {
e.printStackTrace();
}
}public static voidmain(String[] args) {
System.out.println(DBTableToJavaBeanUtil.tableToClass("book", "d:\\", null));
close();
}
}