新建项目时,创建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.由于现在表字段只用部分类型,所以字段类型转换不全。
privateString 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;
}returnparamater;
}
使用步骤,根据环境和需求修改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
@Testpublic voidcontextLoads() {long t =System.currentTimeMillis();
System.out.println("-------------------------开始------------------------------");//创建代码生成器工厂
CodeFactory codeFactory =CodeFactory.getInstance();//获取所有表名
List tableNames =codeFactoryDao.getTableName();for(String tableName:tableNames) {//获取表相关属性
List informationSchemas =codeFactoryDao.getColumnName(tableName);//创建文件
codeFactory.CreateCode(tableName,informationSchemas);
}
System.out.println("-------------------------结束------------------------------");
System.out.println("----------------耗时:"+(System.currentTimeMillis()-t)+"毫秒------------------------------");
}