前言
因感概业务代码存在大量的增删改查功能,只是针对不同的表数据而已。故想有没有办法,在重复的相同代码中替换某些内容,于是按此思路搜寻,了解到有freemarker这个东西,一番学习后,特记录于此。
Freemarker简介
FreeMarker是一款模板引擎: 一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。即:输出=模板+数据。简单来说,其用法原理类似String的replace方法,或MessageFormat的format方法,都是在一定的代码中改变(替换)某些内容。不过FreeMarker更加强大,模板来源可以是外部文件或字符串格式,替换的数据格式多样,而且支持逻辑判断,如此替换的内容将更加灵活。
小例子
比如我们要产生实体类,我们将模板定义如下,模板文件名为entity.flt(flt是freemarker模板的后缀名)
其中的${xxx}就是变量了,由外部传入。可以看到模板还有类似java for each循环的语法。
接下来我们要填充数据了。数据来源后面详细说,先假定我们有了数据。其格式为Map,内容为:
最后我们使用模板替换数据(这里我的模板放在resources/model/下,目标文件放在resources/class/下):
这样最后生成的User.java的内容大概如下:
补充
其实上面已经基本将Freemarker的用法展现了。但是我们还可以做更多改进。
使用数据库作为数据来源
模板中要替换的数据,我们可以从外部手动输入,然后由程序拼装成模板引擎需要的格式。但因为我们最开始也说了,大部分相同的是增删改查,不同的是业务数据库表,所以我们可以直接将数据库表字段作为数据来源。
假如你使用的是mysql,可以写一个mysql工具类,获取数据库字段信息
获取了数据表字段信息,再加上自己需要的一些属性,就可以给模板引擎生成最终代码文件了。
将freemarker转为字符串模板
还可以在一开始就将模板数据读取出来,存放在内存中。
当然,利用字符串模板填充数据的写法有些不同
这样可以将其输入到html页面观看。如果需要的话,还可以随时修改模板,后台接收前端的字符串模板。如此,模板和数据都可以随意定制,岂不是更加灵活方便。
其他
有了以上的认知,我们可以做一个页面,输入数据库参数后,选中某个表,就可以生成关于改表的增删改查代码。或者在页面上添加字段,用这些字段来生成代码。这个就可以自由发挥了~
帖几张我自己的页面截图(没啥样式,吃藕勿喷)
我已经将模板转换成字符串输出了,这样方便查看(其实直接看模板文件也一样= =!)
点击获取表,后台就根据数据库属性查询列表,然后我们选择某一个表,前端自动填充”实体名”和”接口名”属性,一般情况无需修改,点击提交,当当~我们的代码就出来了
当然还可以自定义字段,比如我们不选表,也就是说不用数据库作为来源,在页面上添加几个字段
如果你也使用spring mvc,可以和我一样,设定好多个模板后,一次性将controller-service-serviceImpl-dao-entity-mapping-test全部产生。后面甚至可以继续设定目录或包,产生的代码就可以直接使用啦。
总结
嗯,一句话,模板+数据=最终代码。
模板根据目标代码制定,数据来源我们根据实际情况获取,如此便可diy自己的autocode。
我的autocode地址:https://github.com/tenny-peng/autocode
参考链接:http://www.cnblogs.com/yejg1212/p/4322452.html
http://blog.csdn.net/xiekuntarena/article/details/53032907
http://blog.csdn.net/5iasp/article/details/27181365