使用freemarker模版引擎生成代码

1、简介

        在现实的开发中,我们会有很多重复性代码,为了避免重复性开发,使用模板引擎自动生成代码,类似于mybatis-generator工具,能够节省很多精力写重复性代码。

2、引入freemarker依赖
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
</dependency>
3、使用freemarker生成代码
3.1、建立模板

        以java代码为例,使用 ${} 定义变量,文件名为 test.ftl(注意文件格式)

package com.test.${module};

public class ${Domain}{

    @Override
    public String toString() {
        return "${Domain}{" +
                "} " + super.toString();
    }
}
3.2、freemarker生成核心代码
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.*;
import java.util.Map;

public class FreemarkerUtil {

    static String ftlPath = "./ftl/";
    static Template template;

    public static void initConfig(String ftlName) throws IOException {
        // 输入ftl文件,获取ftl模板
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
        cfg.setDirectoryForTemplateLoading(new File(ftlPath));
        cfg.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_31));
        template = cfg.getTemplate(ftlName);
    }

    public static void generator(String fileName, Map<String, Object> map) throws IOException, TemplateException {
        // 生成代码
        FileWriter fw  = new FileWriter(fileName);
        BufferedWriter bw = new BufferedWriter(fw);
        template.process(map, bw);
        bw.flush();
        fw.flush();
    }
}
3.3、生成 Test.java 代码
import freemarker.template.TemplateException;

import java.io.File;
import java.io.IOException;
import java.util.*;

public class ServerGenerator {
   
    static String serverPath = "[module]/src/main/java/com/[module]/";
    static String module = "";
    
    public static void main(String[] args) throws Exception {
        
        serverPath = serverPath.replace("[module]", "test");
        new File(serverPath).mkdirs();
        System.out.println("servicePath: " + serverPath);

        // 组装参数
        Map<String, Object> param = new HashMap<>();
        // map里面的key是在ftl文件中定义的变量名
        param.put("module", "testjava");
        param.put("Domain", "Test");
        
        gen(param, "testjava", "test");
    }

    private static void gen( Map<String, Object> param, String packageName, String target) throws IOException, TemplateException {
        FreemarkerUtil.initConfig(target + ".ftl");
        String toPath = serverPath + packageName + "/";
        new File(toPath).mkdirs();
        String Target = target.substring(0, 1).toUpperCase() + target.substring(1);
// 生成java文件到指定目录
        String fileName = toPath + Target + ".java";
        System.out.println("开始生成:" + fileName);
        FreemarkerUtil.generator(fileName, param);
    }

}
4、总结

        本文只是利用freemarker做一个简单的案例,关于freemarker的使用流程就是这么多,关于更加复杂的代码生成逻辑还需要对freemarker的语法进行系统学习,掌握freemarker可以生成重复性代码,提高工作效率。

        本人是一个从小白自学计算机技术,对前端、运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其_所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值