spring boot 利用freemarker生成简单CURD接口 博客分类: spring boot
让我们先直接来看可以使用结果
这是任意一个示例项目,我们利用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
具体实现不在过多叙述
上一篇: MySQL5.5实现复制过滤功能
下一篇: H3C交换机堆叠简单案例