欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot 利用freemarker生成简单CURD接口 博客分类: spring boot  

程序员文章站 2024-03-20 21:48:40
...

让我们先直接来看可以使用结果


spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
 这是任意一个示例项目,我们利用swagger展示出了项目中的某些API,如何使用springboot及swagger以及JPA不在本项目过多叙述,不懂的朋友可以自行百度 or Google。

 

现在问题来了,需要添加一组新的接口,新的接口需要基本的CURD。传统的办法是ctrl+c v。

这他么完全是在侮辱程序员智商啊!所以利用模板技术,我们可以实现下面的效果。

 

好打开我们自动生成项目的界面。
spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
 界面自己写的,略丑,毕竟不是专业前端。

 

按照需要填写字段
spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
 我设置了一个person,其中字段有name和birthday,点击自动生成。OK提示生成成功。

在我们重新编译上面的示例项目,刷新swagger界面。
spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
 我曹,api直接已经出现在swagger界面上了,而且是真实可用的接口

当然数据库也是自动建好的(JPA的功能)


spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
 是不是特别方便,省去了很多复制粘贴的重复性工作。当然这适用于简单的实体的CURD。但是因为是生成的源代码,当然自己想加什么字段或者映射都是非常灵活的。

 

***********************************装逼分割线*******************************

 

先来说原理,核心原理是freemarker的模板技术,不懂得朋友可以搜下

我们直接上实体类的template

package ${packageName};


import ${project}.entity.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
<#if defaultIdConfig = true>
import org.hibernate.annotations.GenericGenerator;
</#if>
<#if defaultMySqlConfig = true>
import javax.persistence.*;
</#if>
import java.util.*;
import java.io.Serializable;
<#list attrs as attr>
    <#if attr.packageName??>
import ${attr.packageName};
    </#if>
</#list>
/**
* Created by LiaoKe on ${date}
* From Automatic
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
<#if defaultMySqlConfig = true>
@Entity
    <#if tableName??>
@Table(name=" _${tableName}")
    <#else>
@Table(name=" _${className}")
    </#if>
</#if>
public class ${className} extends EntityCURD implements Serializable{

    <#if defaultIdConfig = true>
        <#if defaultMySqlConfig = true>
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
        </#if>
    private String id;

        <#if defaultMySqlConfig = true>
    @Column(updatable = false) // 默认不修改此数据
        </#if>
    private Date createDate;
    </#if>

    <#list attrs as attr>
        <#if attr.annotationFlag = true>
    //TODO Miss Annotations This message come from Automatic
        </#if>
    private ${attr.fieldType} ${attr.fieldName}; //${attr.describe}

    </#list>


}

 

具体的freemarker语法不多叙述,按照以上模板生成的实体如下

package com.note.entity.person;


import com.note.entity.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.*;
import java.io.Serializable;
/**
* Created by LiaoKe on Wed Jul 05 10:42:06 CST 2017
* From Automatic
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
@Entity
@Table(name=" _person")
public class Person extends EntityCURD implements Serializable{

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    private String id;

    @Column(updatable = false) // 默认不修改此数据
    private Date createDate;

    private String name; //姓名

    private Date birthday; //生日



}

 其中使用了lombok,无需再写set get,代码比较简洁,是个奇巧淫技.....

 

基本思路就是利用模板技术,实现CTRL CV

 

下面试githup地址

 

https://github.com/liaoke0123/automatic

 

具体实现不在过多叙述

 

 

 

 

  • spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
  • 大小: 54.3 KB
  • spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
  • 大小: 27.3 KB
  • spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
  • 大小: 37.3 KB
  • spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
  • 大小: 36.3 KB
  • spring boot 利用freemarker生成简单CURD接口
            
    
    博客分类: spring boot  
  • 大小: 4.6 KB