使用Velocity脚手架代码生成流程
快速开发
-
定义repo service interface模块路径,以及相应的包名;
-
参考MybaticsPlus的代码生成器的做法,根据数据库配置表字段信息,生成整体项目脚手架代码;
-
整体步骤逻辑为:
- 数据配置信息,先在数据库中DDL新建配置好,然后传入url,username,password等信息;
- 代码生成器进行表字段信息获取,转化为ObjectMap,传给context;
- 再定义好相应的vm模板文件(带变量的java代码模板文件),
- 整体传给velocityEngine进行merge操作,就可以将context里面java定义的变量填入vm文件中,
- 最后将合并之后的内容写入对应包路径的文件内;全部文件写入完成后,脚手架代码就写入完成。
代码细节
-
代码风格配置信息: StrategyConfig类定义的,包含: 表过滤清单,过滤表前缀,表和列的驼峰转下换线格式,lombok模式,rest controller风格等等;
-
代码包配置信息: PackageConfig类来定义的,主要包括各个子包的定义,包含: entity,mapper,dao,vo,qo,fo,enums,service,serviceImpl,facade,conttoller,export,resDto,reqDto等等;
-
代码生成部分: 主要包含repo层的结构文件,service层的结构文件,interface层的结构文件;
-
通过AutoGenerator类进行代码主体逻辑实现,传入数据源连接配置,全局设置,包结构配置,模板选择配置,策略风格配置,使用的模板引擎等,然后调取execute()方法进行每层代码文件的生成;
-
具体execute方法的实现,主要包含: 创建ConfigBuilder对象将上步的包信息,代码策略信息,模板信息,全局设置信息整体封装后传给模板引擎进行使用;
-
ConfigBuilder创建时,其构造方法内,调取handlerPackage方法进行包信息和路径信息的拼接处理操作;根据数据源配置信息,调取handlerStrategy方法进行数据库表、列、注释信息的获取,组合代码风格策略配置信息,获取不同数据库类型对应的查询表schema详情信息SQL,通过Connection连接进行数据库表结构信息获取,配置更新处理后,返回TableInfo表信息列表;
-
通过pretreatmentConfigBuilder方法,根据全局配置,对TableInfo表信息进行预处理后再返回;
-
将整体初始化后,包含TableInfo表信息的整体配置ConfigBuilder对象,传给VelocityEngine进行初始化操作;
-
VelocityEngine进行输出目录的创建,核心方法batchOutput的调用,
主要包含:
tableInfo表信息获取,根据表信息内的配置详细转化为渲染对象objectMap,
传入writer方法,引擎获取模板文件获取模板,新建输出文件目录,传入的objectMap构造VelocityContext对象,
然后,Template对象的merge方法,将VelocityContext对象的配置变量信息和模板文件信息进行合并之后写入writer,
最后保存到对应的输出文件中。
-
\