package com.qianmi.kstore; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.sql.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author ChenDaiming * @since 2016/5/12 16:17. */ public class TablesUtil { private final String RN_1 = "\r\n"; private final String RN_2 = RN_1 + RN_1; //@author private final String author = "ChenDaiMing"; //file name private final String FILENAME = "CustomerAddress"; //file address private final String FILEPATH="D:\\workspace\\kstore-v3-platform\\kstore-modules\\kstore-customer\\src\\main\\java\\com\\qianmi\\kstore\\manage"; //file package name private final String PACKAGE = "com.qianmi.kstore.manage"; //Inherit class name (can be empty) private final String EXTENDS_NAME = ""; //implementation class name (can be empty) private final String IMPL_NAME = "Serializable"; // guide package private final String[] IMPORT_CLASS = {"lombok.Data", "java.io.Serializable", "javax.persistence.*", "java.util.Date" }; //surface private final String table = "customer"; //database private final String database = "dababase"; private final String URL = "jdbc:mysql://172.1.2.3:3306/database?characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull"; private final String NAME = "root"; private final String PASSWORD = "123456"; private final String DRIVER = "com.mysql.jdbc.Driver"; private final String SQL = "select COLUMN_NAME,COLUMN_TYPE,column_comment from INFORMATION_SCHEMA.Columns where table_name='"+table+"' and table_schema = '"+database+"'"; /** * Execute the main thread * @param args * @throws ClassNotFoundException */ public static void main(String[] args) throws IOException, ClassNotFoundException { new TablesUtil().createFile(); } /** * Create a file */ public void createFile() { String dateAnnotation = "/**"+RN_1+" * @author "+author+RN_1+" * @since "+getDate()+RN_1+"*/"+RN_1; // folder path String dirPath = FILEPATH +"/"; String fileName = dirPath+FILENAME+".java"; File file = new File(dirPath); if(!file.exists()){ if(file.mkdirs()){ try { new File(fileName).createNewFile(); } catch (IOException e) { showError(fileName); e.printStackTrace (); return; } } } FileWriter fw = null; try { fw = new FileWriter(fileName); } catch (IOException e) { e.printStackTrace (); return; } StringBuilder sb = new StringBuilder(); sb.append("package "); sb.append(PACKAGE); sb.append(";"); sb.append(RN_2); if(IMPORT_CLASS.length > 0){ for (int i = 0; i < IMPORT_CLASS.length ; i++) { sb.append("import "); sb.append(IMPORT_CLASS[i]); sb.append(";"); sb.append(RN_1); } sb.append(RN_1); } sb.append(dateAnnotation); sb.append("@Data"+RN_1); sb.append("@Entity"+RN_1); sb.append("@Table(name = \""+table+"\")"+RN_1); sb.append("public class "); sb.append(FILENAME); sb.append(" "); if(!EXTENDS_NAME.equals("")){ sb.append("extends "); sb.append(EXTENDS_NAME); sb.append(" "); } if(!IMPL_NAME.equals("")){ sb.append("implements "); sb.append(IMPL_NAME); } sb.append("{"); sb.append(RN_1); //add content sb.append(createContent()); sb.append(RN_2); sb.append("}"); String path = sb.toString(); try { if(fw!=null){ fw.write(path); showInfo(fileName); } } catch (IOException e) { showError(fileName); e.printStackTrace (); } finally { try { if(fw!=null){ fw.flush(); fw.close(); } } catch (IOException e) { e.printStackTrace (); } } } /** * add content * @return */ public String createContent(){ List<Table> tables = queryTable(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < tables.size(); i++) { Table table = tables.get(i); sb.append(RN_2); sb.append("/**"+RN_1); sb.append(" *"+table.getParamDesc()+RN_1); sb.append("*/"+RN_1); if(i == 0){ sb.append("@Id"+RN_1); sb.append("@GeneratedValue"+RN_1); } sb.append("@Column(name = \""+table.getParamName()+"\")"+RN_1); sb.append("private "+ getType(table.getParamype()) +" "+ getParamName(table.getParamName())); sb.append(";"); } return sb.toString(); } /** * get type */ public String getType(String type){ if(type.contains("bigint")) { return "Long"; }else if(type.contains("timestamp")){ return "Date"; }else{ return "String"; } } /** * Get property name */ public String getParamName(String param){ if(param.contains("_")){ String[] params = param.split("_"); StringBuilder sb = new StringBuilder(); for (int i = 0; i < params.length; i++) { if(i == 0){ sb.append(params[i]); }else{ sb.append(params[i].substring(0, 1).toUpperCase() + params[i].substring(1)); } } return sb.toString(); }else{ return param; } } /** * add constructor * @param proName * @param className * @return */ private String createConstructor(String proName,String className){ StringBuilder sb = new StringBuilder(); sb.append("public "); sb.append(FILENAME); sb.append("(String name){"); sb.append(RN_1); sb.append("super(name);"); sb.append(RN_1); sb.append("if("); sb.append (proName); sb.append("==null){"); sb.append(RN_1); sb.append (proName); sb.append(" = new "); sb.append(className); sb.append("();"); sb.append(RN_1); sb.append("}}"); sb.append(RN_2); //Add no-argument constructor sb.append("public "); sb.append(FILENAME); sb.append("(){"); sb.append(RN_1); sb.append("super();"); sb.append(RN_2); sb.append("}"); String constructor = sb.toString(); return constructor; } /** * Query database table data */ private List<Table> queryTable(){ List<Table> tables = new ArrayList<Table>(); try { Class.forName(DRIVER).newInstance(); Connection con = DriverManager.getConnection(URL,NAME,PASSWORD); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(SQL); while (rs.next()){ tables.add(new Table(rs.getString(1),rs.getString(2),rs.getString(3))); } } catch (ClassNotFoundException e) { e.printStackTrace (); } catch (InstantiationException e) { e.printStackTrace (); } catch (IllegalAccessException e) { e.printStackTrace (); } catch (SQLException e) { e.printStackTrace (); } return tables; } /** * show creation information */ private void showInfo(String info) { System.out.println("Create file: " + info + "Success!"); } /** * show error message */ private void showError(String info){ System.out.println("Create file: "+info+" failed!"); } /** * Get system time */ public String getDate() { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return simpleDateFormat.format(new Date()); } public class Table{ public String paramName; public String paramype; public String paramDesc; public Table(String paramName, String paramype, String paramDesc) { this.paramName = paramName; this.paramype = paramype; this.paramDesc = paramDesc; } public String getParamName() { return paramName; } public String getParamype() { return paramype; } public String getParamDesc() { return paramDesc; } public void setParamName(String paramName) { this.paramName = paramName; } public void setParamype(String paramype) { this.paramype = paramype; } public void setParamDesc(String paramDesc) { this.paramDesc = paramDesc; } } }