前言

在现在的开发当中,代码生成已经是必不可少的一个功能,每个公司都会有自己的一套定制的项目骨架,而实现代码自动生成,模板引擎是必不可少的,所以在这篇博客中,将会讲解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的更多相关文章

  1. mybatis-generator 代码自动生成插件

    Hibernate 可以选择MyEclipse Datebase Explorer 或者是 Hibernate-tools 等工具来自动生成映射文件和实体类. mybatis 当然也要有!下面简单介绍 ...

  2. 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序

    1. 编写一个能自动生成小学四则运算题目的程序.(10分)   基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图.   本题发一篇随笔,内容包括: 题 ...

  3. 代码自动生成工具MyGeneration之一(程序员必备工具)

    代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrows ...

  4. 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)

    TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...

  5. C# 代码自动生成工具

    开源:C# 代码自动生成工具,支持站点前后台   前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...

  6. Mybatis代码自动生成(含测试)

    一.建立数据库 create database shixun; use shixun; create table user( id int primary key auto_increment , u ...

  7. MyBatis代码自动生成

    MyBatis的代码自动生成的功能,由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实 ...

  8. 代码自动生成工具_java版

    项目结构: 这里要实现的功能是,当我们给出了bean,如:Admin,User,People等实体类后, 我想用代码自动生成我想要的代码,最后生成的效果: 也就是说为每一个bean都生成相应的Dao, ...

  9. Spring Boot (七)MyBatis代码自动生成和辅助插件

    一.简介 1.1 MyBatis Generator介绍 MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper.dao.entity 的框架 ...

随机推荐

  1. Android零基础入门第76节:Activity数据保存和横竖屏切换

    在前面几期学习了Activity的创建.配置.启动和停止,还学了Activity的生命周期,本期一起来学习Activity有关的更多事儿. 一.数据保存 通过上一期 LogCat 窗口打印的日志可以看 ...

  2. GzipStream的简单使用压缩和解压

    压缩和解压都需要用到三个流实例,分别是文件读取流.文件写入流.压缩流. 读取流和写入流有多种形式,压缩流就一种GzipStream. 不同的是对于压缩,是需要用文件写入流作为创建压缩流实例的参数, 压 ...

  3. Unity 3d新手上路

    作为一位unity新手,初学遇到了不少坑,而且不知道怎么找,发觉网上关于unity的文档好少,还是我暂时没找到. 现在说说void OnTriggerEnter(Collider e),这个函数是我加 ...

  4. MySql 小内存优化

    MySql5.6启动内存近500M,如在小型机内存敏感的环境可能较大,下边配置会减少较多内存,至150M以下. performance_schema = OFF innodb_buffer_pool_ ...

  5. QT中Dialog的使用(使用QStackedWidget维护页面切换)

    先看看效果图: pages.h #ifndef PAGES_H #define PAGES_H #include <QWidget> class ConfigurationPage : p ...

  6. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发

    进行本文之前需要在数据库用户表里面增加一条用户数据,直接手动添加即可,未安全考虑密码一定要使用Md5加密后的,这里提供666666的Md5密文为(c831b04de153469d),本文完成登录模块的 ...

  7. IO多路复用与异步非阻塞

    1.基于socket,发送http请求 import socket import requests # 方式一 list=['li','gh ','nn'] for i in list: ret=re ...

  8. java.nio.Buffer源码阅读

    Java 自从 JDK1.4 起,对各种 I/O 操作使用了 Buffer 和 Channel 技术.这种更接近于操作系统的的底层操作使得 I/O 操作速度得到大幅度提升,下面引用一段<Java ...

  9. spark开发常见问题之一:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

    最近在学习研究pyspark机器学习算法,执行代码出现以下异常: 19/06/29 10:08:26 ERROR Shell: Failed to locate the winutils binary ...

  10. 修改linux(kali)和windows双系统下默认启动系统和启动延时

    我的公众号,正在建设中,欢迎关注: windows和kali双系统安装完成后kali是默认的启动系统,现将windows设置为默认启动系统并更改选择系统等待时间 1.开机时当运行到系统选择菜单时记下w ...