`

spring boot 利用freemarker生成简单CURD接口

 
阅读更多

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



 这是任意一个示例项目,我们利用swagger展示出了项目中的某些API,如何使用springboot及swagger以及JPA不在本项目过多叙述,不懂的朋友可以自行百度 or Google。

 

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

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

 

好打开我们自动生成项目的界面。

 界面自己写的,略丑,毕竟不是专业前端。

 

按照需要填写字段

 我设置了一个person,其中字段有name和birthday,点击自动生成。OK提示生成成功。

在我们重新编译上面的示例项目,刷新swagger界面。

 我曹,api直接已经出现在swagger界面上了,而且是真实可用的接口

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



 是不是特别方便,省去了很多复制粘贴的重复性工作。当然这适用于简单的实体的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

 

具体实现不在过多叙述

 

 

 

 

  • 大小: 54.3 KB
  • 大小: 27.3 KB
  • 大小: 37.3 KB
  • 大小: 36.3 KB
  • 大小: 4.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics