二.二.六 其他配置
二.二.六.一 其他配置FTL
创建 other.ftl
- 字符串嵌套输出.
<#--字符串嵌套输出--> <h3>字符串嵌套输出</h3> ${"hello ${name}"}
2.定义变量
<h3>定义变量输出</h3> <#assign number1 = 10> <#assign number2 = 5>
3.算术运算符
<h3>定义变量输出</h3> <#assign number1 = 10> <#assign number2 = 5> <#-- 支持"+"、"-"、"*"、"/"、"%"运算符 --> "+" : ${number1 + number2} "-" : ${number1 - number2} "*" : ${number1 * number2} "/" : ${number1 / number2} "%" : ${number1 % number2}
4.内建函数
<h3>内建函数</h3> 第一个字母大写: ${str?cap_first} 所有字母小写: ${str?lower_case} 所有字母大写: ${str?upper_case}
5.将数据取整
<h3>将数据取整</h3> <#assign floatData = 12.34> 数值取整数:${floatData?int}
6.获取集合的长度
<h3>获取集合的长度:</h3> 获取集合的长度:${users?size}
7.日期进行格式化
<h3>日期进行格式化</h3> 时间格式化:${dateTime?string("yyyy-MM-dd")}
8.循环遍历 map
<#--循环遍历map--> Map集合: <#assign mapData={"name":"程序员", "salary":15000}> 直接通过Key获取 Value值:${mapData["name"]} 通过Key遍历Map: <#list mapData?keys as key> Key: ${key} - Value: ${mapData[key]} </#list> 通过Value遍历Map: <#list mapData?values as value> Value: ${value} </#list>
整体编写:
<html> <head> <title>这是放置freemark的其他的相关的用法</title> </head> <body> <#--字符串嵌套输出--> <h3>字符串嵌套输出</h3> ${"hello ${name}"} <h3>定义变量输出</h3> <#assign number1 = 10> <#assign number2 = 5> <#-- 支持"+"、"-"、"*"、"/"、"%"运算符 --> "+" : ${number1 + number2} "-" : ${number1 - number2} "*" : ${number1 * number2} "/" : ${number1 / number2} "%" : ${number1 % number2} <h3>内建函数</h3> 第一个字母大写: ${str?cap_first} 所有字母小写: ${str?lower_case} 所有字母大写: ${str?upper_case} <h3>将数据取整</h3> <#assign floatData = 12.34> 数值取整数:${floatData?int} <h3>获取集合的长度:</h3> 获取集合的长度:${users?size} <h3>日期进行格式化</h3> 时间格式化:${dateTime?string("yyyy-MM-dd")} <#--循环遍历map--> Map集合: <#assign mapData={"name":"程序员", "salary":10000}> 直接通过Key获取 Value值:${mapData["name"]} 通过Key遍历Map: <#list mapData?keys as key> Key: ${key} - Value: ${mapData[key]} </#list> 通过Value遍历Map: <#list mapData?values as value> Value: ${value} </#list> </body> </html>
二.二.六.二 其他配置开发
@Test public void otherFill() throws Exception{ //1. 创建 Configuration 对象 Configuration configuration=new Configuration(Configuration.VERSION_2_3_29); //2. 设置基本的目录信息。 configuration.setDirectoryForTemplateLoading(new File("D:\\learncode\\Template\\FreeMark\\Basic\\src\\main\\resources\\freemark" )); //3. 设置编码等格式 configuration.setDefaultEncoding("utf-8"); //4. 设置要添加的数据信息 Map<String,Object> root=new HashMap<>(); root.put("name","两个蝴蝶飞"); root.put("str","Two Butterfly"); List<User> userList=getUserList(); root.put("users",userList); root.put("dateTime",new Date()); //5. 获取对应的模板 Template template=configuration.getTemplate("other.ftl","utf-8"); //6. 设置输出对象 Writer out=new OutputStreamWriter(System.out); //7. 调用 template的 process 方法,进行填充 template.process(root,out); } private List<User> getUserList() { List<User> userList=new ArrayList<>(); for(int i=1;i<=10;i++){ User user=new User(); user.setId(i); user.setName("蝴蝶"+i); user.setAge(i*3+1); user.setSex(i%2); user.setDescription("一个简单的描述"); userList.add(user); } return userList; }
三. 使用 FreeMarker 配置模板文件
可以使用 FreeMarker的配置文件, 通过往模板里面填充属性,来创建特定的文件。
如生成一个基本的 Main 类
三.一 模板 FTL
package ${packageName}; /** @author: ${author} @Date: ${createDate?string("yyyy-MM-dd hh:mm:ss")} @Description: ${classDescription} */ public class ${className}{ /** 功能描述: ${mainMethodDesc!TODO} */ public static void main(String []args){ System.out.println("${info}"); } }
三.二 模板类创建
public class CodeAuto { public static String FTLTEMPLATE="src/main/java/com/zk/template/freemark/code/"; public static String CODELOCATION="src/main/java/com/zk/template/freemark/code/"; @Test public void codeGenerate() throws Exception{ Configuration configuration=new Configuration(Configuration.VERSION_2_3_29); configuration.setDirectoryForTemplateLoading(new File(FTLTEMPLATE)); configuration.setDefaultEncoding("utf-8"); //填充数据 Map root=getMainMap(); //获取对应的模板 Template template=configuration.getTemplate("main.ftl","utf-8"); //获取对应的输出流 Writer out=new BufferedWriter( new OutputStreamWriter( new FileOutputStream( CODELOCATION+"FreeMain.java" ) ) ); template.process(root,out); System.out.println(">>>>>>创建模板类成功"); } private Map<String,Object> getMainMap() { Map<String,Object> root=new HashMap<>(); root.put("packageName","com.zk.template.freemark.code"); root.put("author","TwoButterfly"); root.put("createDate",new Date()); root.put("classDescription","一个测试Freemark 自动生成类"); root.put("className","FreeMain"); root.put("mainMethodDesc","一个普通的测试方法"); root.put("info","Freemark 创建类生成信息"); return root; } }
生成的模板文件类:
本章节的代码放置在 github 上:
https://github.com/yuejianli/springboot/tree/develop/FreeMark
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!