若依框架---模板生成

简介: 若依框架---模板生成

上次说到通过mybatis-collection机制,将数据库中的一对多数据映射为Java对象GenTable,之后又是如何一步一步的生成预览代码的呢?

我们注意到GenTable中有一个字段名为tplCategory,它可取值crud, tree,sub,分别表示
crud:单表;tree:树表操作;sub:主子表。暂未涉及,按下不表[手动狗头]。


模板引擎 Velocity


后续代码执行到:

VelocityInitializer.initVelocity();


这一句执行中,引入了一个第三方的类库org.apache.velocity.app.Velocity。经过询问度娘与谷哥,我们知道这是一个模板引擎。


通过简单阅读Velocity文档,了解到它可以通过配置模板并配合java代码实现后续内容填充。比如在掘金网站上有一篇博客介绍了如何使用Velocity:Velocity开发指南,例如,模板文件hello.vm中内容为:

Hi! This $name from the $project project.


通过对nameproject赋值,我们可以生成想要的内容。

    /* 首先,初始化运行时引擎,使用默认的配置 */
        Velocity.init();
        /* 创建Context对象,然后把数据放进去 */
        VelocityContext context = new VelocityContext();
        context.put("name", "Velocity");
        context.put("project", "Jakarta");
        /* 渲染模板 */
        StringWriter w = new StringWriter();
        Velocity.mergeTemplate("testtemplate.vm", context, w );
        System.out.println(" template : " + w );


然后,自然而然的下一步就是构造Velocity的数据以及获取模板。构造数据代码如下所示:

/**
     * 设置模板变量信息
     *
     * @return 模板列表
     */
    public static VelocityContext prepareContext(GenTable genTable)
    {
        // 省略代码......
        VelocityContext velocityContext = new VelocityContext();
        velocityContext.put("tplCategory", genTable.getTplCategory());
        velocityContext.put("tableName", genTable.getTableName());
        velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】");
        velocityContext.put("ClassName", genTable.getClassName());
      // 省略代码......
        return velocityContext;
    }


寻找模板代码如下:

 List<String> templates = new ArrayList<String>();
 templates.add("vm/java/domain.java.vm");
 templates.add("vm/java/mapper.java.vm");
 templates.add("vm/java/service.java.vm");
 templates.add("vm/java/serviceImpl.java.vm");
 templates.add("vm/java/controller.java.vm");
 templates.add("vm/xml/mapper.xml.vm");
 templates.add("vm/sql/sql.vm");
 templates.add("vm/js/api.js.vm");
 if (GenConstants.TPL_CRUD.equals(tplCategory))
 {
     templates.add("vm/vue/index.vue.vm");
 }
else if (GenConstants.TPL_TREE.equals(tplCategory))
{
    templates.add("vm/vue/index-tree.vue.vm");
}
else if (GenConstants.TPL_SUB.equals(tplCategory))
{
    templates.add("vm/vue/index.vue.vm");
    templates.add("vm/java/sub-domain.java.vm");
}


其中特意根据表类型做了区分,我们来看看其中的domain.java.vm长什么样子?


有点复杂的样子。

目录
相关文章
element ui实现多层级复杂表单的操作(添加与回显)之表单操作交互操作
element ui实现多层级复杂表单的操作(添加与回显)之表单操作交互操作
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型(LLM)从入门到精通:测试人的技术跃迁指南
大模型正快速融入测试全流程——从用例生成、脚本编写到日志分析。本文用实战视角带你搞懂LLM核心原理、落地场景与避坑指南,手把手教你从“会用”进阶到“会赋能”,做那个驾驭AI的超级测试工程师。
|
Shell 程序员 开发工具
码云代码托管平台
码云代码托管平台
|
6月前
|
人工智能 IDE 开发工具
从6人日到1人日:一次AI驱动的客户端需求开发实战
从6人日到1人日:一次AI驱动的客户端需求开发实战
从6人日到1人日:一次AI驱动的客户端需求开发实战
|
8月前
|
数据采集 人工智能 安全
MyEMS 开源能源管理系统:赋能双碳目标的能源数字化基础设施
MyEMS 是基于 Python 构建的开源能源管理系统,支持多场景能源数据采集、分析与可视化,集成设备管理、故障诊断与AI优化控制,助力碳达峰碳中和目标。系统符合国家“三级平台”架构,具备高扩展性与安全性,适用于工厂、数据中心等多种场景。
314 7
|
9月前
|
Java Spring
如何让若依框架的自动生成代码使用的是Mybatis-Plus
该代码模板实现了基于Java的CRUD操作,包含Controller、Domain、Mapper、Service及ServiceImpl模块,适用于Spring Boot项目,支持数据查询、新增、修改、删除及导出功能。
385 4
|
5月前
|
机器学习/深度学习 人工智能 Cloud Native
Anaconda3 2025 深度解析:Python 3.11 + 提速、大模型支持,安装步骤+安装包
Anaconda3 2025 是面向数据科学与AI开发的一站式平台,集成Python环境、包管理与开发工具,支持机器学习、大模型开发及云原生部署,开箱即用,助力高效开发。
1830 2
|
网络协议 程序员 数据安全/隐私保护
LabVIEW在两台计算机之间传输数据
LabVIEW在两台计算机之间传输数据
409 0
|
搜索推荐 UED Python
实现一个带有昼夜背景切换的动态时钟:从代码到功能解析
本文介绍了一个使用Python和Tkinter库实现的动态时钟程序,具有昼夜背景切换、指针颜色随机变化及整点和半点报时功能。通过设置不同的背景颜色和随机变换指针颜色,增强视觉吸引力;利用多线程技术确保音频播放不影响主程序运行。该程序结合了Tkinter、Pygame、Pytz等库,提供了一个美观且实用的时间显示工具。欢迎点赞、关注、转发、收藏!
562 94
|
11月前
|
前端开发 网络协议 应用服务中间件
Netty基础—7.Netty实现消息推送服务
本文详细介绍了如何使用Netty实现HTTP服务器、WebSocket以及基于WebSocket的消息推送系统。首先,通过解析HTTP请求和响应消息,展示了Netty在性能和可靠性上的优势,并提供了具体代码示例。接着,分析了HTTP协议的弊端及Ajax短轮询的不足,引出WebSocket全双工通信的优势,包括连接建立、数据处理逻辑与ping-pong探测等。最后,构建了一个完整的消息推送系统,涵盖PushServer、运营客户端与浏览器客户端的交互过程,实现了全连接推送和实时消息传递。

热门文章

最新文章