实现一个代码自动生成(一):模板引擎Freemarker
前言
在现在的开发当中,代码生成已经是必不可少的一个功能,每个公司都会有自己的一套定制的项目骨架,而实现代码自动生成,模板引擎是必不可少的,所以在这篇博客中,将会讲解freemarker在代码生成中所扮演的角色,以及介绍如何在Java项目中使用它!
模板引擎FreeMarker
模板引擎是什么?
模板引擎一般指将通用代码和业务数据分离开来的技术,该技术有多种实现,如置换型、解释型、编译型,如JSP就是其中一种应用非常广泛的模板引擎技术(其本质是一个Servlet,用来生成Html文件)
FreeMarker是什么?
官方文档:
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
简单来讲就是FreeMarker把目标文本分解成了Model、View,然后引擎自身充当了Controller,也就是常见的MVC模式。
FreeMarker通过预先定义好的模板文件(ftl文件),再把如Java对象中的属性进行填充,最后输出目标文件。
FreeMarker如何使用?
FreeMarker不像JSP,需要绑定Servlet才能使用,在Java中我们只需要导入对应的Jar包就可以使用了!接下来会介绍在Maven项目中如何使用FreeMarker。
加入依赖
首先我们先在pom.xml中加入FreeMarker的依赖:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
创建Configuration实例
// step1 创建freemarker.template.Configuration配置实例
Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
创建数据模型
我们可以使用一个String,或者以下的类型的实例充当数据模型,在这里使用了一个自定义的Bean。
使用 java.lang.String 来构建字符串。
使用 java.lang.Number 来派生数字类型。
使用 java.lang.Boolean 来构建布尔值。
使用 java.util.List 或Java数组来构建序列。
使用 java.util.Map 来构建哈希表。
使用自定义的bean类来构建哈希表,bean中的项和bean的属性对应。比如, product 的 price 属性 (getProperty())可以通过 product.price 获取。(bean的action也可以通过这种方式拿到; 要了解更多可以参看 这里)
//创建一个root hash对象,用来装载数据对象
Map<String, Object> root = new HashMap<>();
//将数据对象装载入hash中
root.put("user", new User("Joe",17));
使用到的自定义的User类
//User
public class User {
private String name;
private int age;
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
User(String name, int age) {
this.age = age;
this.name = name;
}
}
创建一个模板文件(.ftl文件)
<--! demo.ftl -->
<user>
<name>user.name</name>
<age>user.age</age>
</user>
获取模板
获取之前我们创建的demo.ftl模板文件
Template temp = cfg.getTemplate("demo.ftl");
合并模板和数据
我们在了解FreeMarker的开始就知道,数据模型+模板=目标输出,在最后,我们只需要将获取到的模板,和自定义的root hash对象进行绑定,这里会使用到Template的process()方法;
//创建输出流,定义输出的文件
File docFile = new File("demo.xml");
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
//process方法将数据与模板进行绑定,输出到out输出流
temp.process(root, out);
最后我们成功地新建了demo.xml文件!
<--! demo.ftl -->
<user>
<name>Joe</name>
<age>17</age>
</user>
整合代码
// 创建freemarker.template.Configuration配置实例
Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
//创建一个root hash对象,用来装载数据对象
Map<String, Object> root = new HashMap<>();
//将数据对象装载入hash中
root.put("user", new User("Joe",17));
//获取模板
Template temp = cfg.getTemplate("demo.ftl");
//创建输出流,定义输出的文件
File docFile = new File("demo.xml");
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
//process方法将数据与模板进行绑定,输出到out输出流
temp.process(root, out);
实现一个代码自动生成(一):模板引擎Freemarker的更多相关文章
- mybatis-generator 代码自动生成插件
Hibernate 可以选择MyEclipse Datebase Explorer 或者是 Hibernate-tools 等工具来自动生成映射文件和实体类. mybatis 当然也要有!下面简单介绍 ...
- 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序
1. 编写一个能自动生成小学四则运算题目的程序.(10分) 基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图. 本题发一篇随笔,内容包括: 题 ...
- 代码自动生成工具MyGeneration之一(程序员必备工具)
代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...
- 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)
TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...
- C# 代码自动生成工具
开源:C# 代码自动生成工具,支持站点前后台 前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...
- Mybatis代码自动生成(含测试)
一.建立数据库 create database shixun; use shixun; create table user( id int primary key auto_increment , u ...
- MyBatis代码自动生成
MyBatis的代码自动生成的功能,由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实 ...
- 代码自动生成工具_java版
项目结构: 这里要实现的功能是,当我们给出了bean,如:Admin,User,People等实体类后, 我想用代码自动生成我想要的代码,最后生成的效果: 也就是说为每一个bean都生成相应的Dao, ...
- Spring Boot (七)MyBatis代码自动生成和辅助插件
一.简介 1.1 MyBatis Generator介绍 MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper.dao.entity 的框架 ...
随机推荐
- Anbox —— 在 Linux 系统中运行 Android 应用
具有以下特性: 没有限制:由于 Anbox 运行着整个 Android 系统,所以理论上任何应用都可以在其中运行 安全:Anbox 将 Android APP 放进一个密封的盒子中,无需直接访问硬件或 ...
- Windows系统版本判定那些事儿(有图,各种情况,很清楚)
前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度讨论下Windows获取系统版本的方法和遇到的一些问题.在Win8和Win10出来之后,在获取 ...
- 判断一个窗口是否被挂起(发WM_NULL消息,或者调用IsHungAppWindow API进行测试)
判断一个窗口是否被挂起了(就是没有响应了),在多窗口编程了经常会用到,在给别的窗口发消息前,为了目的窗口能确定收到消息,常常在之前先检测窗口是否被挂起了,我们以前常用的方式的是使用下面的方法: // ...
- QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)
QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioBu ...
- springmvc登录拦截jsp页面
web.xml配置 <filter> <filter-name>LoginFilter</filter-name> //编写拦截的类的全类名 <filter- ...
- Java开发桌面程序学习(九)——JavaFxTemplate JavaFx模版 更简单进行JavaFx程序开发
JavaFxTemplate 使用说明 项目基于maven,请确保maven配置成功,否则,可能会出现问题 项目内置了commons-io的jar包,Jfoenix的jar包以及常用的工具类JFxUt ...
- Java开发桌面程序学习(十)——css样式表使用以及Button悬浮改变样式实现
css样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 ja ...
- Scala 学习之路(四)—— 数组Array
一.定长数组 在Scala中,如果你需要一个长度不变的数组,可以使用Array.但需要注意以下两点: 在Scala中使用(index)而不是[index]来访问数组中的元素,因为访问元素,对于Scal ...
- Storm 学习之路(八)—— Storm集成HDFS和HBase
一.Storm集成HDFS 1.1 项目结构 本用例源码下载地址:storm-hdfs-integration 1.2 项目主要依赖 项目主要依赖如下,有两个地方需要注意: 这里由于我服务器上安装的是 ...
- java源码解析之String类(一)
String是我们接触最多的类,无论是学习中还是工作中,基本每天都会和字符串打交道,从字符串本身的各种拼接.切片.变形,再到和其他基本数据类型的转换,几乎无时无刻都在使用它,今天就让我们揭开Strin ...