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)+"毫秒------------------------------");
    }