第一步:引入jar包

<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.23</version>
		</dependency>

第二步:建立相关文件

     2.1:建立一个ftl模板的文件,我这里建立在项目目录下的resource目录下,建立一个hello.ftl文件,ftl是freemaker的文件拓展名,hello.ftl其内容很简单,可以认为是一个EL表达式去取值

${hello}

      2.2:建立一个文件作为输出的结果的地方,拓展名任意,我这里就在左面建立一个1.html

C:/Users/xiaomi/Desktop/freemaker/1.html

第三步:建立测试方法

@Test
	public void fun01() throws Exception{
//		第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
		Configuration configuration = new Configuration(Configuration.getVersion());
		
//		第二步:设置模板文件所在的路径。
		configuration.setDirectoryForTemplateLoading(new File("D:/JavaPractice/Maven/freemaker/src/main/resources"));
		
//		第三步:设置模板文件使用的字符集。一般就是utf-8.
		configuration.setDefaultEncoding("utf-8");
		
//		第四步:加载一个模板,创建一个模板对象。
		Template template = configuration.getTemplate("hello.ftl");
		
//		第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
		Map<String, Object> map = new HashMap<String,Object>();
		map.put("hello","hello freemaker!!!");
		
//		第六步:创建一个Writer对象,指定生成的文件名。
		FileWriter writer = new FileWriter(new File("C:/Users/xiaomi/Desktop/freemaker/1.html"));
		
//		第七步:调用模板对象的process方法输出文件。
		template.process(map, writer);
		
//		第八步:关闭流。
		writer.close();
	}

第四步:查看1.html,就会输出hello freemaker!!!内容,就是自己设置的!


前面已近说了freemaker的简单使用,接下说一下其相关简单语法的使用,存值放在map中,模板通过key来获取!整体上感觉跟EL表达式差不多!!举例如下

pojo:

测试代码:
Map<String, Object> map = new HashMap<String,Object>();
		Persion persion = new Persion("gxm", 21, "男");
		map.put("persion",persion);

模板:
    姓名:${persion.name}
    年龄:${persion.age}
    性别:${persion.sex}


结果:
    姓名:gxm
    年龄:21
    性别:男

循环:

测试代码:
Map<String, Object> map = new HashMap<String,Object>();
		Persion persion1 = new Persion("gxm01", 21, "男");
		Persion persion2 = new Persion("gxm02", 21, "男");
		Persion persion3 = new Persion("gxm03", 21, "男");
		List<Persion> persionList = new ArrayList<Persion>();
		persionList.add(persion1);
		persionList.add(persion2);
		persionList.add(persion3);
		map.put("persionList",persionList);

模板:
    <#list persionList as persion>
        下标:${persion_index}
	    姓名:${persion.name}
	    年龄:${persion.age}
	    性别:${persion.sex}
    </#list>


结果:
    下标:0 姓名:gxm01 年龄:21 性别:男
    下标:1 姓名:gxm02 年龄:21 性别:男
    下标:2 姓名:gxm02 年龄:21 性别:男

判断之IF-ELSE:

测试代码:
Map<String, Object> map = new HashMap<String,Object>();
		Persion persion1 = new Persion("gxm01", 21, "男");
		Persion persion2 = new Persion("gxm02", 21, "男");
		Persion persion3 = new Persion("gxm03", 21, "男");
		List<Persion> persionList = new ArrayList<Persion>();
		persionList.add(persion1);
		persionList.add(persion2);
		persionList.add(persion3);
		map.put("persionList",persionList);

模板:
    <#list persionList as persion>

        <#if persion_index%2==0>
		    ${persion_index}  : 我是偶数
		    <#else>
		    ${persion_index}  : 我是奇数
	    </#if>

        下标:${persion_index}
	    姓名:${persion.name}
	    年龄:${persion.age}
	    性别:${persion.sex}
    </#list>


结果:
    0:我是偶数  下标:0 姓名:gxm01 年龄:21 性别:男
    1:我是奇数  下标:1 姓名:gxm02 年龄:21 性别:男
    2:我是偶数  下标:2 姓名:gxm02 年龄:21 性别:男

日期格式的处理:

问号后面表明要形成的日期格式

测试代码:
Map<Object,Object> map = new HashMap<Object,Object>();
		map.put("myDate",new Date());

模板:
        
    日期格式处理:
    ${myDate?date}//第一种格式
    ${myDate?time} //第二种格式
    ${myDate?datetime} //第三种格式
    ${myDate?string("yyyy/MM/dd HH:mm:ss")}//第四种,自己表明格式


结果:
    日期格式处理: 2
    2018-12-7 
    18:05:54 
    2018-12-7 18:05:54 
    2018/12/07 18:05:54

null值的处理:

测试代码:
Map<Object,Object> map = new HashMap<Object,Object>();
		map.put("myDate",new Date());

模板:
       null的处理

第一种在后面增加一个感叹号,并表示默认值:
	${nullKey!"我是为null时的默认值"}

第二种在后面增加一个感叹号,但是不加默认值:
	${nullKey!}
	
第三种使用if和else判断
	<#if nullKey??>
		我是空值!
		<#else>
		我不是空值!
	</#if>


结果:
    null的处理 第一种在后面增加一个感叹号,并表示默认值:       我是为null时的默认值 
    第二种在后面增加一个感叹号,但是不加默认值: 
    第三种使用if和else判断:                                 我不是空值!