FreeMarker的使用(下)

简介: FreeMarker的使用

二.二.六 其他配置


二.二.六.一 其他配置FTL


创建 other.ftl


  1. 字符串嵌套输出.


<#--字符串嵌套输出-->
<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;
          }


01d0440aeb33d6b7cec68f4ec4bcf50f.png


三. 使用 FreeMarker 配置模板文件


可以使用 FreeMarker的配置文件, 通过往模板里面填充属性,来创建特定的文件。


如生成一个基本的 Main 类


87ca661dd4bc06e8c24bf9fdb4d77f29.png


三.一 模板 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;
    }
}


36eb0c5ed351b6af5f3ea241a6e60a08.png


9598196bc6dff74ed4ea0c1c1f0ce51e.png


生成的模板文件类:


323c59c5186831a1a641766281fa4dab.png


本章节的代码放置在 github 上:


https://github.com/yuejianli/springboot/tree/develop/FreeMark


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

相关文章
|
存储 安全 数据安全/隐私保护
【计算机网络】第三章 数据链路层(集线器与交换机)
【计算机网络】第三章 数据链路层(集线器与交换机)
|
机器学习/深度学习 自然语言处理
谷歌发布时序预测基础模型TimesFM
【2月更文挑战第27天】谷歌发布时序预测基础模型TimesFM
989 3
谷歌发布时序预测基础模型TimesFM
|
8月前
|
人工智能 自然语言处理 Java
从国外到国产,AI 编程工具混战,开发者究竟该如何抉择?
AI编程工具正深刻变革开发模式,从国外的GitHub Copilot、Cursor、Trae到国内的飞算JavaAI与通义灵码,各具特色。Copilot依托开源代码与强大模型提升效率,但成本高且偶有“AI幻觉”;Cursor适合中高级开发者,续写速度快但团队版有限制;Trae以免费GPT-4和中文界面吸引用户,但可持续性存疑。国产工具方面,飞算JavaAI专注全流程Java开发,一键生成工程代码,大幅提升效率;通义灵码支持多语言,功能丰富且与IDE无缝集成。开发者需根据语言、阶段、成本等因素权衡选择,找到最适合自身需求的工具,实现开发效率与质量的飞跃。
针对报错:java.lang.Integer cannot be cast to java.lang.Long..的解决办法
针对报错:java.lang.Integer cannot be cast to java.lang.Long..的解决办法
4978 0
针对报错:java.lang.Integer cannot be cast to java.lang.Long..的解决办法
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue教材订购系统设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot+Vue教材订购系统设计和实现(源码+LW+调试文档+讲解等)
|
监控 Devops 持续交付
程序员必须了解的 10个免费 Devops 工具
程序员必须了解的 10个免费 Devops 工具
|
NoSQL Java Redis
Redis 从入门到精通之Redis操作删除指定Key
删除redis 可以使用Del、unlinke。推荐使用unlink。Redis是一个内存数据库,删除key会立即释放内存,因此要慎重删除,避免误删重要数据。
7129 105
dynamic-datasource动态添加移除数据源
dynamic-datasource动态添加移除数据源
952 0