新建项目时,创建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)+"毫秒------------------------------"); }