后端系统全栈框架Erupt

Erupt简介

Erupt是一个低代码全栈类框架,它使用Java 注解动态生成页面以及增、删、改、查、权限控制等后台功能。零前端代码、零CURD、自动建表,仅需一个类文件?+ 简洁的注解配置,快速开发企业级后台管理系统。

基本使用

我们首先来波实战,以商品品牌管理为例,来熟悉下Erupt结合SpringBoot的基本使用!

SpringBoot整合Erupt

由于Erupt原生支持SpringBoot,所以整合还是很方便的!

为了方便管理Erupt版本,我们先在pom.xml中添加Erupt的版本属性;

1.6.13

之后在pom.xml中添加Erupt的权限管理、数据安全、后台WEB界面及MySQL驱动依赖;

<!--用户权限管理-->

xyz.erupt

erupt-upms

${erupt.version}

<!--接口数据安全-->

xyz.erupt

erupt-security

${erupt.version}

<!--后台WEB界面-->

xyz.erupt

erupt-web

${erupt.version}

<!--Mysql数据库驱动-->

mysql

mysql-connector-java

8.0.15

修改项目的application.yml文件,添加数据源和JPA配置;

spring:

datasource:

url:jdbc:mysql://localhost:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

username:root

password:root

jpa:

show-sql:true

generate-ddl:true

database-platform:org.hibernate.dialect.MySQL5InnoDBDialect

database:mysql

在项目的resources目录下创建如下配置文件(拷贝mall-tiny-erupt中的即可);

添加Erupt的Java配置类EruptConfig,以启动类MallTinyApplication的包为准,配置包扫码路径;

/**

*?Created?by?macro?on?2021/4/13.

*/

@Configuration

@ComponentScan({"xyz.erupt","com.macro.mall.tiny"})

@EntityScan({"xyz.erupt","com.macro.mall.tiny"})

@EruptScan({"xyz.erupt","com.macro.mall.tiny"})

publicclassEruptConfig{

}

在MySQL中创建erupt数据库,之后使用启动类运行该项目,在erupt数据库中会自动创建如下表;

项目启动成功后,可以直接访登录页,默认账号密码erupt:erupt,项目访问地址:http://localhost:8080/

登录成功后会跳转到项目主页,我们可以发现没有写一行前端代码,却拥有了完整的权限管理和字典管理功能,是不是很棒!

实现单表 CRUD

使用核心注解@Erupt和@EruptField定义一个实体类即可快速完成CRUD操作,让我们以商品品牌管理为例试试吧。

不需要Controller、Service、Dao,仅仅一个实体类即可完成CRUD,首先我们创建实体类PmsBrand;

@Erupt(name?="商品品牌")

@Table(name?="pms_brand")

@Entity

publicclassPmsBrand{

@Id

@GeneratedValue(generator?="generator")

@GenericGenerator(name?="generator",?strategy?="native")

@Column(name?="id")

@EruptField

privateLong?id;

@EruptField(

views?=@View(title?="品牌名称"),

edit?=@Edit(title?="品牌名称",notNull=true,search?=@Search(vague?=true))

)

privateString?name;

@EruptField(

views?=@View(title?="品牌首字母"),

edit?=@Edit(title?="品牌首字母",notNull=true)

)

privateString?firstLetter;

@EruptField(

views?=@View(title?="品牌LOGO"),

edit?=@Edit(title?="品牌LOGO",?type?=?EditType.ATTACHMENT,

attachmentType?=@AttachmentType(type?=?AttachmentType.Type.IMAGE))

)

privateString?logo;

@EruptField(

views?=@View(title?="品牌专区大图"),

edit?=@Edit(title?="品牌专区大图",?type?=?EditType.ATTACHMENT,

attachmentType?=@AttachmentType(type?=?AttachmentType.Type.IMAGE))

)

privateString?bigPic;

@EruptField(

views?=@View(title?="品牌故事"),

edit?=@Edit(title?="品牌故事")

)

privateString?brandStory;

@EruptField(

views?=@View(title?="排序"),

edit?=@Edit(title?="排序")

)

privateInteger?sort;

@EruptField(

views?=@View(title?="是否显示"),

edit?=@Edit(title?="是否显示")

)

privateBoolean?showStatus;

@EruptField(

views?=@View(title?="品牌制造商"),

edit?=@Edit(title?="品牌制造商")

)

privateBoolean?factoryStatus;

privateInteger?productCount;

privateInteger?productCommentCount;

}

创建成功后重启项目,在菜单维护中添加一个叫商品的一级菜单;

然后再添加一个叫品牌管理的二级菜单,注意选择好菜单类型和上级菜单,输入类型值为实体类的类名称PmsBrand;

菜单添加成功后,刷新页面,完整的品牌管理功能就出现了,来试下新增;

再看下查询列表页面,可以发现我们通过@Edit注解,将实体类的字段转换成了不同的输入控件,比如文本框、图片上传框、单选框和数值框。

核心注解说明

几个Erupt的核心注解,对照PmsBrand中的代码学习即可!

@Erupt

name:功能名称

desc:功能描述

@EruptField

views:表格展示配置

edit:编辑项配置

sort:前端展示顺序,数字越小越靠前

@View

title:表格列名称

desc:表格列描述

type:数据展示形式,默认为AUTO,可以根据属性类型自行推断

show:是否显示

@Edit

title:表格列名称

desc:表格列描述

type:编辑类型,默认为AUTO,可以根据属性类型自行推断

show:是否显示

notNull:是否为必填项

search:是否支持搜索,search = @Search(vague = true)会启用高级查询策略

扩展???/p>

当然Erupt的功能远不止于此,还集成了很多实用的系统功能,包括定时任务、代码生成器、系统监控及NoSQL支持等。

定时任务erupt-job

通过定时任务功能,我们可以在代码中定义好定时任务,然后在图形化界面中操作任务,有点之前讲过的PowerJob?的感觉!

首先我们需要在pom.xml中添加erupt-job相关依赖;

<!--定时任务erupt-job-->

xyz.erupt

erupt-job

${erupt.version}

之后在application.yml中添加邮件配置(否则启动会报错);

spring:

mail:

username:xxxxxx@qq.com

password:123456

host:smtp.exmail.qq.com

port:465

properties:

mail.smtp.ssl.auth:true

mail.smtp.ssl.enable:true

mail.smtp.ssl.required:true

之后创建一个定时任务实现类JobHandlerImpl,在exec方法中添加定时任务执行代码;

/**

*?Created?by?macro?on?2021/4/13.

*/

@Service

@Slf4j

publicclassJobHandlerImplimplementsEruptJobHandler{

@Override

publicStringexec(String?code,?String?param)throwsException{

log.info("定时任务已经执行,code:{},param:{}",code,param);

return"success";

}

}

之后重新启动应用,在任务维护中添加一个定时任务,每5秒执行一次;

添加成功后,定时任务开始执行,点击任务列表中的日志按钮即可查看执行日志。



代码生成器erupt-generator

如果你觉得手写实体类比较麻烦的话,还可以用用Erupt中的代码生成器。

在pom.xml中添加erupt-generator相关依赖;

<!--?代码生成器?erupt-generator?-->

xyz.erupt

erupt-generator

${erupt.version}

在代码生成菜单中我们可以像在Navicat中一样,直接添加表和字段,从而生成实体类代码;

我们在添加过程中可以发现,Erupt支持的编辑类型还挺多的,多达30种;



添加成功后,点击列表项的代码预览按钮可以直接生成代码,复制到自己项目下即可。



系统监控erupt-monitor

通过使用Erupt的系统监控功能,我们可以查看服务器的配置、Redis的缓存使用情况和在线用户信息。

在pom.xml中添加erupt-monitor相关依赖;

<!--服务器监控?erupt-monitor-->

xyz.erupt

erupt-monitor

${erupt.version}

由于需要使用到Redis,所以要在application.yml中添加Redis配置,并开启Session的Redis存储功能;

spring:

redis:

host:localhost#?Redis服务器地址

database:1#?Redis数据库索引(默认为0)

port:6379#?Redis服务器连接端口

password:123456#?Redis服务器连接密码(默认为空)

timeout:3000ms#?连接超时时间

erupt:

#?开启redis方式存储session,默认false,开启后需在配置文件中添加redis配置

redisSession:true

通过服务监控菜单,可以查看到服务器的CPU、内存和Java虚拟机信息;


通过缓存监控菜单,可以查看到Redis信息、命令统计和Redis Key统计;

通过在线用户菜单,可以查看到在线用户信息,还可以让用户强行退出!





NoSQL数据源erupt-mongodb


Erupt支持多种数据源,包括:MySQL、Oracle、PostgreSQL、H2,甚至支持 MongoDB。下面我们来体验下MongoDB的支持功能。

在pom.xml中添加erupt-mongodb相关依赖;

<!--NoSQL数据源?erupt-mongodb-->

xyz.erupt

erupt-mongodb

${erupt.version}

由于需要使用到MongoDB,所以要在application.yml中添加MongoDB配置;

spring:

data:

mongodb:

host:localhost#?mongodb的连接地址

port:27017#?mongodb的连接端口号

database:erupt#?mongodb的连接的数据库

以一个简化版的商品管理为例,还是熟悉的套路,添加一个PmsProduct实体类;

/**

*?Created?by?macro?on?2021/4/13.

*/

@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)//此注解表示使用MongoDB来存储数据

@Document(collection?="product")

@Erupt(

name?="商品管理",

orderBy?="sort"

)

publicclassPmsProduct{

@Id

@EruptField

privateString?id;

@EruptField(

views?=@View(title?="商品名称",?sortable?=true),

edit?=@Edit(title?="商品名称",?search?=@Search(vague?=true))

)

privateString?name;

@EruptField(

views?=@View(title?="副标题",?sortable?=true),

edit?=@Edit(title?="副标题",?search?=@Search(vague?=true))

)

privateString?subTitle;

@EruptField(

views?=@View(title?="价格",?sortable?=true),

edit?=@Edit(title?="价格")

)

privateDouble?price;

@EruptField(

views?=@View(title?="商品图片"),

edit?=@Edit(title?="商品图片",?type?=?EditType.ATTACHMENT,

attachmentType?=@AttachmentType(type?=?AttachmentType.Type.IMAGE))

)

privateString?pic;

@EruptField(

views?=@View(title?="状态",?sortable?=true),

edit?=@Edit(title?="状态",

boolType?=@BoolType(trueText?="上架",?falseText?="下架"),

search?=@Search)

)

privateBoolean?publishStatus;

@EruptField(

views?=@View(title?="创建时间",?sortable?=true),

edit?=@Edit(title?="创建时间",?search?=@Search(vague?=true))

)

privateDate?createTime;

}

与之前操作MySQL的区别是通过@EruptDataProcessor注解指定用MongoDB来存储数据,@Table注解改为使用@Document注解;

@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)//此注解表示使用MongoDB来存储数据

@Document(collection?="product")

@Erupt(

name?="商品管理",

orderBy?="sort"

)

publicclassPmsProduct{

//...省略若干代码

}

接下来就是在菜单维护里面添加一个商品管理的菜单,刷新一下就可以看到该功能了。


在线接口开发erupt-magic-api

最后再介绍一个神奇的功能,直接通过UI界面来开发接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象!

在pom.xml中添加erupt-magic-api相关依赖;

<!--在线接口开发?erupt-magic-api-->

xyz.erupt

erupt-magic-api

${erupt.version}

在application.yml中添加magic-api相关配置;

erupt:

#?设置具体哪些包被jackson消息转化而不是gson

jacksonHttpMessageConvertersPackages:

-org.ssssssss

magic-api:

web:/magic/web

#?接口配置文件存放路径

resource.location:D:/erupt/magic-script

我们可以直接通过magic-api自己定义的脚本来实现查询,比如下面这个脚本,用于查询全部品牌;

varsql?="select?*?from?pms_brand";

returndb.select(sql);

在接口配置菜单中直接添加该脚本即可实现品牌列表查询接口,无需额外编写代码;


在浏览器中直接访问接口,发现已经自动生成接口,是不是很棒!


总结

如果你的需求是搭建一个业务并不复杂的后台管理系统,Erupt是一个很好的选择!它能让你不写前端代码!但是如果你的需求方对界面有很多要求,而你的业务逻辑又比较复杂的话那就要自己实现前端了!

官方文档:https://www.yuque.com/erupts/erupt

项目源码地址:

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-erupt

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容

  • Django知识点概述 Web应用 问题1:描述一个Web应用的工作流程。 问题2:描述项目的物理架构。(上图中补...
    领带衬有黄金阅读 695评论 0 1
  • 1、谈谈对http协议的认识流程:1.域名解析域名解析检查顺序为:浏览器自身DNS缓存---》OS自身的DNS缓存...
    Zzmi阅读 698评论 0 0
  • 一、Django框架前言知识: 1、C/S和B/S的区别: C/S结构软件:客户端/服务端软件,即客户端要自己下载...
    月下独酌123阅读 4,518评论 0 36
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,532评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,187评论 4 8