1. 程式人生 > >java程式碼生成器

java程式碼生成器

新建專案時,建立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)+"毫秒------------------------------");
    }