java程式碼生成器
阿新 • • 發佈:2018-12-18
新建專案時,建立Dao、Service、ServiceImpl、Po過於繁瑣,所以使用模板工具寫了一個程式碼生成器。
使用技術:mysql+velocity+springboot
專案github:https://github.com/lcp22/fcct
實現效果:自動獲取資料庫表名及列相關屬性,自動建立相應的Dao、Service、ServiceImpl、Po。
庫裡有21張表,不到2秒的時間,就能自動生成基礎的模型,效率還不錯。生成內容部分截圖:
dao
po
service
serviceImp
現有BUG:
1.如果資料庫的某張表只有一個欄位,生成該表的模型會出現問題。
2.由於現在表字段只用部分型別,所以欄位型別轉換不全。
private String formatSqlParamater(String sqlParamater){ String paramater = ""; switch (sqlParamater){ case "int": paramater = "Integer"; break; case "bigint": paramater = "Long"; break;case "varchar": paramater = "String"; break; case "datetime": paramater = "Date"; break; case "timestamp": paramater = "Date"; break; } return paramater; }
使用步驟,根據環境和需求修改CodeTemplates.properties,然後直接在FcctApplicationTests呼叫contextLoads:
#是否重複建立 COVER_FLAG = false #生成檔案上級路徑 CODE_PACKAGE = src/main/java/cn/lcp/fcct/ #需要生成檔案:po,dao,service,serverImpl TEMPLATES = po,dao,service,serviceImpl #生成insert_sql和update_sql時是否過濾第一個欄位:即ID EXCLUDE_FIRST_PARAMATER = true #生成insert_sql和update_sql時過濾資料庫欄位 EXCLUDE_FILES = is_status,create_time #生成實體類時過濾欄位 EXCLUDE_FILEDS = is_status,create_time,last_time
@Test public void contextLoads() { long t = System.currentTimeMillis(); System.out.println("-------------------------開始------------------------------"); //建立程式碼生成器工廠 CodeFactory codeFactory = CodeFactory.getInstance(); //獲取所有表名 List<String> tableNames = codeFactoryDao.getTableName(); for (String tableName:tableNames) { //獲取表相關屬性 List<InformationSchema> informationSchemas = codeFactoryDao.getColumnName(tableName); //建立檔案 codeFactory.CreateCode(tableName,informationSchemas); } System.out.println("-------------------------結束------------------------------"); System.out.println("----------------耗時:"+(System.currentTimeMillis()-t)+"毫秒------------------------------"); }