当前位置:首页 > 科技 > 正文

代码生成器第二篇-生成domain对象

在上篇文章中介绍了下整体思路,本篇主要实现如何通过freemarker来生成domain对象。

整体步骤大致如下

  1. 整理domain对象模板
  2. 运行freemarker需要的基本内容
  3. 通过io写出文件。

整理domain对象模板

申明一下,这里的domain特指PO(persistant object持久对象)。

一个domain对象的组成主要有下列几种部分

  1. 包路径
  2. 需引入的包
  3. 类申明
  4. 字段申明,字段申明由字段类型和字段名称组成,访问权限全是private
  5. getter和setter方法。
  6. 其他注释注释信息或者tostring方法。

我们有了这些东西,那么就可以把变化的部分以插值替代。

运行freemarker需要的基本内容

这个官方文档写得很清楚了,从官网得知,我们运行freemarker需要三步,1:实例化configuration对象 2:获取模板 3:写入到io流

我打算在spring boot中使用,通过默认配置自动装配很简单,但我没使用自动装配(autowire注解不方便做单元测试)。于是乎我通过查看FreeMarkerAutoConfiguration的代码得知他是通过FreeMarkerConfigurationFactory完成装配的,因此

public static Configuration initFtl() throws IOException, TemplateException {        if(FtlUtil.cfg==null){            FreeMarkerConfigurationFactory freeMarkerConfigurationFactory=new FreeMarkerConfigurationFactory();            freeMarkerConfigurationFactory.setTemplateLoaderPath("classpath:/templates/");            cfg=freeMarkerConfigurationFactory.createConfiguration();        }        return cfg;    }

写出到io流

没啥好说的 通过调用freemarker的template.process就写出去了。你可以把它改成FileWriter即可。

public static Writer genFile(GenTableConfig root, String templateStr) throws IOException, TemplateException {        initFtl();        Template template=cfg.getTemplate(templateStr);        StringWriter out = new StringWriter();        template.process(root,out);        out.close();        return out;    }

遗留问题:

整理domain模板的时候想到的问题如下:

引包怎么办?像基本数据类型没问题,不需要引包,但是像时间,数组其他的类型怎么处理?

驼峰表达式怎么搞?目前demo只需要完成模板文件输出即可,但我们最终的字段是来自数据库,数据库中的规范是下划线隔开,而代码的规范是驼峰。

引包还有一个问题写漏了,我需要识别数据库中给的jdbcType并转化为对应的JavaType。

写出IO流时想到的问题如下:

我最终应该要支持以文件形式写出到本地指定路径,同时也支持以接口的形式写出。

后续我会添加很多模板,或许我可以考虑包一层zip。

备注:我有一个小小的心得,就是做啥东西都先考虑测试成本。所以在写freemarker的运行代码之前,我们也许该先写个单元测试。所以下一篇应该会先讲单元测试吧

peace and love。

本站文章部分来源于网友投稿或采集自互联网,如有侵权,请联系,本站将及时删除。 另也欢迎广大网友投稿发文!

相关文章:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。