freemarker 生成java_FreeMarker之根据模板生成Java代码

FreeMarker根据模板生成Java代码,光这句话,大家想必也知道它的应用了,比如流行的DRY原则,该原则的意思,可简单概述为"不要写重复的代码"。

比如Java中三层架构,数据访问层,业务逻辑层,表现层,光这三层就出现重复性的增删改查及其相关的界面代码。

如何不写重复的增删改查相关的代码,可以参考我的MP实战系列文章和MyBatis的逆向工程(针对Java相关框架):

其中MP实战系列(六)之代码生成器讲解 用的是volocity模板引擎。原理与FreeMarker本质上是一致的,这个本质一致,你可以理解为都是基于已有的模板进行代码生成。

下面进入简单示例讲解:

一、导入maven依赖

4.0.0

cn.test

freemarket

0.0.1-SNAPSHOT

war

org.freemarker

freemarker

2.3.23

org.apache.maven.plugins

maven-compiler-plugin

2.0.2

1.8

1.8

${project.artifactId}

二、新建com.freemarker.hello.templates包,并在该包下编写模板文件test.ftl

package${classPath};public class${className} {privateInteger ${Id};privateString ${userName};privateString ${password};publicInteger get${Id}(){return${Id};

}public voidset${Id}(Integer ${Id}){this.${Id}=${Id};

}publicString get${userName}(){return${userName};

}public voidset${userName}(String ${userName}){this.${userName}=${userName};

}publicString get${password}(){return${password};

}public voidset${password}(String ${password}){this.${password}=${password};

}

}

三、编写运行生成对应Java代码类

packagecom.freemark.hello;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStreamWriter;importjava.io.Writer;importjava.util.HashMap;importjava.util.Map;importfreemarker.template.Configuration;importfreemarker.template.Template;public classFreemarkerDemo {private static final String TEMPLATE_PATH = "src/main/java/com/freemark/hello/templates";private static final String CLASS_PATH = "src/main/java/com/freemark/hello";public static voidmain(String[] args) {//step1 创建freeMarker配置实例

Configuration configuration = newConfiguration();

Writer out= null;try{//step2 获取模版路径

configuration.setDirectoryForTemplateLoading(newFile(TEMPLATE_PATH));//step3 创建数据模型

Map dataMap = new HashMap();

dataMap.put("classPath", "com.freemark.hello");

dataMap.put("className", "User");

dataMap.put("Id", "Id");

dataMap.put("userName", "userName");

dataMap.put("password","password");//step4 加载模版文件

Template template = configuration.getTemplate("test.ftl");//step5 生成数据

File docFile = new File(CLASS_PATH + "\\" + "User.java");

out= new BufferedWriter(new OutputStreamWriter(newFileOutputStream(docFile)));//step6 输出文件

template.process(dataMap, out);

System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^User.java 文件创建成功 !");

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (null !=out) {

out.flush();

}

}catch(Exception e2) {

e2.printStackTrace();

}

}

}

}

四、步骤三成功,刷新(refresh)项目即可,看到com.freemark.hello有一个User类

小结:该示例非常简单,freemarker的强大不足以在此体现,不过该示例对于初学者或者准备研究freemarker的开发者有一定的启示意义。

比如:遵守"DRY原则",对于开发效率的提高,帮助非常大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值