当前位置:首页 > 文章列表 > 文章 > java教程 > SpringBoot怎么整合freemarker实现代码生成器

SpringBoot怎么整合freemarker实现代码生成器

来源:亿速云 2024-04-06 12:24:37 0浏览 收藏

怎么入门文章编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《SpringBoot怎么整合freemarker实现代码生成器》,涉及到,有需要的可以收藏一下

    一、介绍

    在实际的软件项目开发过程中,我可以很负责任的跟大家说,如果你真的实际写代码的时间超过5年,你对增删改查这类简单的功能需求开发,可以说已经完全写吐了,至少我就是这种类型的。

    但是呢,不可否认,绝大多数的软件功能,向下追随到最基本的单元,也基本都是单表的增、删、改、查!

    只是随着用户需求不断增多,原来可能一个张单表就可以搞定的事情,现在可能需要多张表,或者多个库才能搞定,代码层就像堆积木一样,越堆越复杂。

    我记得早期做项目的时候,项目每新加一张单表,我都需要在代码层,按照MVC框架的思想,重新编写一套CURD的代码,写完所有的基础的增删改查,至少需要20分钟,手快的情况下,最快也要10分钟。

    假如某个新开发的功能,要新增10张表,按照这个时间计算,至少要100分钟,仔细想想,其实你会发现大部分的时间都浪费在这些简单而又重复的编程圈子中去了。

    那有没有一个办法,将这些简单的CURD代码,全部都标准化、公共化呢?这样我们的可以省下很多时间来投入业务场景的开发。

    答案是肯定的,有!

    我记得早期我最先接触的是MybatisGenertor工具包,通过这个工具包,我们可以省去大部分的mybaitsxml文件的curd编写工作。

    还有我们所熟悉的JPA,里面有一套公共的持久层动态代理类,它可以自动根据名称生成SQL语句,能为开发省下不少的事情。

    但是我这个人比较懒,我想搞一个工具,从controllerserviceentity dao层,全部的crud代码,包括单元测试类,通过工具自动生成好。

    像这样的工具,现在网上也有不少,例如我们所熟悉的Mybatis-plus插件,它就可以做到这一点,也是非常好用。

    但是有的公司就不喜欢它,原因也很简单,里面的很多公共方法封装的过于深入,而且很多crudsql全部都是动态生成,你根本看不到。

    总之啊就是一句,不在自己掌控之内的,很多程序员总是带着各种疑虑~~

    当然,还有一个明显的疑虑,就是对微服务的开发,不能全面支持,比如你项目采用的是SpringBoot +Dubbo组合来开发,这个时候生成的controller,完全没啥用处,而且还很鸡肋。

    因此在这种情况下,你得基于当前的项目软件开发规则,自己开发一套代码生成器,以满足快速开发的需要。

    下面我就简单的介绍一下,如何自行开发一套代码生成器,过程如下!

    二、代码实践

    其实开发一套代码生成器,真没大家想象中的那么复杂,其中用的最重要一项技术,就是利用模板来生成代码,例如我们经常使用的模板引擎freemarker,它就可以帮助我们实现这一点。

    2.1、首先我们添加 freemarker 依赖包

    
        org.freemarker
        freemarker
        2.3.23
    

    2.2、然后创建一个代码模版

    下面我们以动态创建实体类为例,编写一个实体类的模板entity.java.ftl,其中${}里面定义的是动态变量。

    package ${package};
    
    import java.io.Serializable;
    
    /**
     * 

     * ${tableComment}  * 

     *  * @author ${author}  * @since ${date}  */ public class ${entityClass} implements Serializable {     private static final long serialVersionUID = 1L;          <#--属性遍历-->     <#list columns as pro>     /**      * ${pro.comment}      */     private ${pro.propertyType} ${pro.propertyName};          <#--属性get||set方法-->     <#list columns as pro>     public ${pro.propertyType} get${pro.propertyName?cap_first}() {         return this.${pro.propertyName};     }     public ${entityClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) {         this.${pro.propertyName} = ${pro.propertyName};         return this;     }      }

    2.3、最后生成目标代码

    最后我们基于freemarker编写一个测试类!

    public class CodeGeneratorDemo {
    
        public static void main(String[] args) throws IOException, TemplateException {
            Map objectMap = new HashMap<>();
            //定义包路径
            objectMap.put("package", "com.example.test");
            //定义实体类
            objectMap.put("entityClass", "Student");
    
            //定义实体类属性
            List> columns = new ArrayList<>();
            //姓名字段
            Map column1 = new HashMap<>();
            column1.put("propertyType", "String");
            column1.put("propertyName", "name");
            column1.put("comment", "姓名");
            columns.add(column1);
            //年龄字段
            Map column2 = new HashMap<>();
            column2.put("propertyType", "Integer");
            column2.put("propertyName", "age");
            column2.put("comment", "年龄");
            columns.add(column2);
    
            //定义类的属性
            objectMap.put("columns", columns);
            //定义作者
            objectMap.put("author", "张三");
            //定义创建时间
            objectMap.put("date", new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
            //定义类描述
            objectMap.put("tableComment", "学生信息");
    
            //生产目标代码
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
            configuration.setDefaultEncoding(Charset.forName("UTF-8").name());
            configuration.setClassForTemplateLoading(CodeGeneratorDemo.class, "/");
            Template template = configuration.getTemplate("/templates/entity.java.ftl");
            FileOutputStream fileOutputStream = new FileOutputStream(new File("../src/main/java/com/example/generator/Student.java"));
            template.process(objectMap, new OutputStreamWriter(fileOutputStream, Charset.forName("UTF-8").name()));
            fileOutputStream.close();
            System.out.println("文件创建成功");
    
        }
    }

    运行程序,输出的文件结果如下!

    package com.example.test;
    
    import java.io.Serializable;
    
    /**
     * 

     * 学生信息  * 

     *  * @author 张三  * @since 2021-08-22  */ public class Student implements Serializable {     private static final long serialVersionUID = 1L;          /**      * 姓名      */     private String name;     /**      * 年龄      */     private Integer age;     public String getName() {         return this.name;     }     public Student setName(String name) {         this.name = name;         return this;     }     public Integer getAge() {         return this.age;     }     public Student setAge(Integer age) {         this.age = age;         return this;     } }

    与预期的效果一致,成功生成!

    例如小编我就是采用这种方式,首先把要通过工具生成的代码,全部通过模板方式定义好。

    SpringBoot怎么整合freemarker实现代码生成器

    然后通过连接数据库的方式,把需要自动生成的表结构查询出来,封装成数据渲染参数,最后传入到freemarker中去,非常简单、快速的生成与自己预期想要的代码,所有单表的crud全部一步到位!

    下面这个就是小编,基于当前项目定制开发的一款代码生成器,项目采用SpringBoot + Dubbo框架开发,没有Controller层,截图中所有的代码全部都是采用代码生成器生成的,直接通过单元测试就可以运行,开发的时候非常快!

    SpringBoot怎么整合freemarker实现代码生成器

    终于介绍完啦!小伙伴们,这篇关于《SpringBoot怎么整合freemarker实现代码生成器》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

    版本声明
    本文转载于:亿速云 如有侵犯,请联系study_golang@163.com删除
    Win10电脑日历怎么显示节假日?Win10电脑日历显示节假日的方法Win10电脑日历怎么显示节假日?Win10电脑日历显示节假日的方法
    上一篇
    Win10电脑日历怎么显示节假日?Win10电脑日历显示节假日的方法
    读取 udp:4604:使用关闭的网络连接
    下一篇
    读取 udp:4604:使用关闭的网络连接
    查看更多
    最新文章
    查看更多
    课程推荐
    • 前端进阶之JavaScript设计模式
      前端进阶之JavaScript设计模式
      设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
      542次学习
    • GO语言核心编程课程
      GO语言核心编程课程
      本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
      508次学习
    • 简单聊聊mysql8与网络通信
      简单聊聊mysql8与网络通信
      如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
      497次学习
    • JavaScript正则表达式基础与实战
      JavaScript正则表达式基础与实战
      在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
      487次学习
    • 从零制作响应式网站—Grid布局
      从零制作响应式网站—Grid布局
      本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
      484次学习
    查看更多
    AI推荐
    • 毕业宝AIGC检测:AI生成内容检测工具,助力学术诚信
      毕业宝AIGC检测
      毕业宝AIGC检测是“毕业宝”平台的AI生成内容检测工具,专为学术场景设计,帮助用户初步判断文本的原创性和AI参与度。通过与知网、维普数据库联动,提供全面检测结果,适用于学生、研究者、教育工作者及内容创作者。
      9次使用
    • AI Make Song:零门槛AI音乐创作平台,助你轻松制作个性化音乐
      AI Make Song
      AI Make Song是一款革命性的AI音乐生成平台,提供文本和歌词转音乐的双模式输入,支持多语言及商业友好版权体系。无论你是音乐爱好者、内容创作者还是广告从业者,都能在这里实现“用文字创造音乐”的梦想。平台已生成超百万首原创音乐,覆盖全球20个国家,用户满意度高达95%。
      26次使用
    • SongGenerator.io:零门槛AI音乐生成器,快速创作高质量音乐
      SongGenerator
      探索SongGenerator.io,零门槛、全免费的AI音乐生成器。无需注册,通过简单文本输入即可生成多风格音乐,适用于内容创作者、音乐爱好者和教育工作者。日均生成量超10万次,全球50国家用户信赖。
      21次使用
    •  BeArt AI换脸:免费在线工具,轻松实现照片、视频、GIF换脸
      BeArt AI换脸
      探索BeArt AI换脸工具,免费在线使用,无需下载软件,即可对照片、视频和GIF进行高质量换脸。体验快速、流畅、无水印的换脸效果,适用于娱乐创作、影视制作、广告营销等多种场景。
      26次使用
    • SEO标题协启动:AI驱动的智能对话与内容生成平台 - 提升创作效率
      协启动
      SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
      27次使用
    微信登录更方便
    • 密码登录
    • 注册账号
    登录即同意 用户协议隐私政策
    返回登录
    • 重置密码