后端系統(tǒng)全棧框架Erupt

Erupt簡(jiǎn)介

Erupt是一個(gè)低代碼全棧類(lèi)框架,它使用Java 注解動(dòng)態(tài)生成頁(yè)面以及增、刪、改、查、權(quán)限控制等后臺(tái)功能。零前端代碼、零CURD、自動(dòng)建表,僅需一個(gè)類(lèi)文件?+ 簡(jiǎn)潔的注解配置,快速開(kāi)發(fā)企業(yè)級(jí)后臺(tái)管理系統(tǒng)。

基本使用

我們首先來(lái)波實(shí)戰(zhàn),以商品品牌管理為例,來(lái)熟悉下Erupt結(jié)合SpringBoot的基本使用!

SpringBoot整合Erupt

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

為了方便管理Erupt版本,我們先在pom.xml中添加Erupt的版本屬性;

1.6.13

之后在pom.xml中添加Erupt的權(quán)限管理、數(shù)據(jù)安全、后臺(tái)WEB界面及MySQL驅(qū)動(dòng)依賴;

<!--用戶權(quán)限管理-->

xyz.erupt

erupt-upms

${erupt.version}

<!--接口數(shù)據(jù)安全-->

xyz.erupt

erupt-security

${erupt.version}

<!--后臺(tái)WEB界面-->

xyz.erupt

erupt-web

${erupt.version}

<!--Mysql數(shù)據(jù)庫(kù)驅(qū)動(dòng)-->

mysql

mysql-connector-java

8.0.15

修改項(xiàng)目的application.yml文件,添加數(shù)據(jù)源和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

在項(xiàng)目的resources目錄下創(chuàng)建如下配置文件(拷貝mall-tiny-erupt中的即可);

添加Erupt的Java配置類(lèi)EruptConfig,以啟動(dòng)類(lèi)MallTinyApplication的包為準(zhǔn),配置包掃碼路徑;

/**

*?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中創(chuàng)建erupt數(shù)據(jù)庫(kù),之后使用啟動(dòng)類(lèi)運(yùn)行該項(xiàng)目,在erupt數(shù)據(jù)庫(kù)中會(huì)自動(dòng)創(chuàng)建如下表;

項(xiàng)目啟動(dòng)成功后,可以直接訪登錄頁(yè),默認(rèn)賬號(hào)密碼erupt:erupt,項(xiàng)目訪問(wèn)地址:http://localhost:8080/

登錄成功后會(huì)跳轉(zhuǎn)到項(xiàng)目主頁(yè),我們可以發(fā)現(xiàn)沒(méi)有寫(xiě)一行前端代碼,卻擁有了完整的權(quán)限管理和字典管理功能,是不是很棒!

實(shí)現(xiàn)單表 CRUD

使用核心注解@Erupt和@EruptField定義一個(gè)實(shí)體類(lèi)即可快速完成CRUD操作,讓我們以商品品牌管理為例試試吧。

不需要Controller、Service、Dao,僅僅一個(gè)實(shí)體類(lèi)即可完成CRUD,首先我們創(chuàng)建實(shí)體類(lèi)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?="品牌名稱(chēng)"),

edit?=@Edit(title?="品牌名稱(chēng)",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?="品牌專(zhuān)區(qū)大圖"),

edit?=@Edit(title?="品牌專(zhuān)區(qū)大圖",?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;

}

創(chuàng)建成功后重啟項(xiàng)目,在菜單維護(hù)中添加一個(gè)叫商品的一級(jí)菜單;

然后再添加一個(gè)叫品牌管理的二級(jí)菜單,注意選擇好菜單類(lèi)型和上級(jí)菜單,輸入類(lèi)型值為實(shí)體類(lèi)的類(lèi)名稱(chēng)PmsBrand;

菜單添加成功后,刷新頁(yè)面,完整的品牌管理功能就出現(xiàn)了,來(lái)試下新增;

再看下查詢列表頁(yè)面,可以發(fā)現(xiàn)我們通過(guò)@Edit注解,將實(shí)體類(lèi)的字段轉(zhuǎn)換成了不同的輸入控件,比如文本框、圖片上傳框、單選框和數(shù)值框。

核心注解說(shuō)明

幾個(gè)Erupt的核心注解,對(duì)照PmsBrand中的代碼學(xué)習(xí)即可!

@Erupt

name:功能名稱(chēng)

desc:功能描述

@EruptField

views:表格展示配置

edit:編輯項(xiàng)配置

sort:前端展示順序,數(shù)字越小越靠前

@View

title:表格列名稱(chēng)

desc:表格列描述

type:數(shù)據(jù)展示形式,默認(rèn)為AUTO,可以根據(jù)屬性類(lèi)型自行推斷

show:是否顯示

@Edit

title:表格列名稱(chēng)

desc:表格列描述

type:編輯類(lèi)型,默認(rèn)為AUTO,可以根據(jù)屬性類(lèi)型自行推斷

show:是否顯示

notNull:是否為必填項(xiàng)

search:是否支持搜索,search = @Search(vague = true)會(huì)啟用高級(jí)查詢策略

擴(kuò)展模塊

當(dāng)然Erupt的功能遠(yuǎn)不止于此,還集成了很多實(shí)用的系統(tǒng)功能,包括定時(shí)任務(wù)、代碼生成器、系統(tǒng)監(jiān)控及NoSQL支持等。

定時(shí)任務(wù)erupt-job

通過(guò)定時(shí)任務(wù)功能,我們可以在代碼中定義好定時(shí)任務(wù),然后在圖形化界面中操作任務(wù),有點(diǎn)之前講過(guò)的PowerJob?的感覺(jué)!

首先我們需要在pom.xml中添加erupt-job相關(guān)依賴;

<!--定時(shí)任務(wù)erupt-job-->

xyz.erupt

erupt-job

${erupt.version}

之后在application.yml中添加郵件配置(否則啟動(dòng)會(huì)報(bào)錯(cuò));

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

之后創(chuàng)建一個(gè)定時(shí)任務(wù)實(shí)現(xiàn)類(lèi)JobHandlerImpl,在exec方法中添加定時(shí)任務(wù)執(zhí)行代碼;

/**

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

*/

@Service

@Slf4j

publicclassJobHandlerImplimplementsEruptJobHandler{

@Override

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

log.info("定時(shí)任務(wù)已經(jīng)執(zhí)行,code:{},param:{}",code,param);

return"success";

}

}

之后重新啟動(dòng)應(yīng)用,在任務(wù)維護(hù)中添加一個(gè)定時(shí)任務(wù),每5秒執(zhí)行一次;

添加成功后,定時(shí)任務(wù)開(kāi)始執(zhí)行,點(diǎn)擊任務(wù)列表中的日志按鈕即可查看執(zhí)行日志。



代碼生成器erupt-generator

如果你覺(jué)得手寫(xiě)實(shí)體類(lèi)比較麻煩的話,還可以用用Erupt中的代碼生成器。

在pom.xml中添加erupt-generator相關(guān)依賴;

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

xyz.erupt

erupt-generator

${erupt.version}

在代碼生成菜單中我們可以像在Navicat中一樣,直接添加表和字段,從而生成實(shí)體類(lèi)代碼;

我們?cè)谔砑舆^(guò)程中可以發(fā)現(xiàn),Erupt支持的編輯類(lèi)型還挺多的,多達(dá)30種;



添加成功后,點(diǎn)擊列表項(xiàng)的代碼預(yù)覽按鈕可以直接生成代碼,復(fù)制到自己項(xiàng)目下即可。



系統(tǒng)監(jiān)控erupt-monitor

通過(guò)使用Erupt的系統(tǒng)監(jiān)控功能,我們可以查看服務(wù)器的配置、Redis的緩存使用情況和在線用戶信息。

在pom.xml中添加erupt-monitor相關(guān)依賴;

<!--服務(wù)器監(jiān)控?erupt-monitor-->

xyz.erupt

erupt-monitor

${erupt.version}

由于需要使用到Redis,所以要在application.yml中添加Redis配置,并開(kāi)啟Session的Redis存儲(chǔ)功能;

spring:

redis:

host:localhost#?Redis服務(wù)器地址

database:1#?Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0)

port:6379#?Redis服務(wù)器連接端口

password:123456#?Redis服務(wù)器連接密碼(默認(rèn)為空)

timeout:3000ms#?連接超時(shí)時(shí)間

erupt:

#?開(kāi)啟redis方式存儲(chǔ)session,默認(rèn)false,開(kāi)啟后需在配置文件中添加redis配置

redisSession:true

通過(guò)服務(wù)監(jiān)控菜單,可以查看到服務(wù)器的CPU、內(nèi)存和Java虛擬機(jī)信息;


通過(guò)緩存監(jiān)控菜單,可以查看到Redis信息、命令統(tǒng)計(jì)和Redis Key統(tǒng)計(jì);

通過(guò)在線用戶菜單,可以查看到在線用戶信息,還可以讓用戶強(qiáng)行退出!





NoSQL數(shù)據(jù)源erupt-mongodb


Erupt支持多種數(shù)據(jù)源,包括:MySQL、Oracle、PostgreSQL、H2,甚至支持 MongoDB。下面我們來(lái)體驗(yàn)下MongoDB的支持功能。

在pom.xml中添加erupt-mongodb相關(guān)依賴;

<!--NoSQL數(shù)據(jù)源?erupt-mongodb-->

xyz.erupt

erupt-mongodb

${erupt.version}

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

spring:

data:

mongodb:

host:localhost#?mongodb的連接地址

port:27017#?mongodb的連接端口號(hào)

database:erupt#?mongodb的連接的數(shù)據(jù)庫(kù)

以一個(gè)簡(jiǎn)化版的商品管理為例,還是熟悉的套路,添加一個(gè)PmsProduct實(shí)體類(lèi);

/**

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

*/

@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)//此注解表示使用MongoDB來(lái)存儲(chǔ)數(shù)據(jù)

@Document(collection?="product")

@Erupt(

name?="商品管理",

orderBy?="sort"

)

publicclassPmsProduct{

@Id

@EruptField

privateString?id;

@EruptField(

views?=@View(title?="商品名稱(chēng)",?sortable?=true),

edit?=@Edit(title?="商品名稱(chēng)",?search?=@Search(vague?=true))

)

privateString?name;

@EruptField(

views?=@View(title?="副標(biāo)題",?sortable?=true),

edit?=@Edit(title?="副標(biāo)題",?search?=@Search(vague?=true))

)

privateString?subTitle;

@EruptField(

views?=@View(title?="價(jià)格",?sortable?=true),

edit?=@Edit(title?="價(jià)格")

)

privateDouble?price;

@EruptField(

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

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

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

)

privateString?pic;

@EruptField(

views?=@View(title?="狀態(tài)",?sortable?=true),

edit?=@Edit(title?="狀態(tài)",

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

search?=@Search)

)

privateBoolean?publishStatus;

@EruptField(

views?=@View(title?="創(chuàng)建時(shí)間",?sortable?=true),

edit?=@Edit(title?="創(chuàng)建時(shí)間",?search?=@Search(vague?=true))

)

privateDate?createTime;

}

與之前操作MySQL的區(qū)別是通過(guò)@EruptDataProcessor注解指定用MongoDB來(lái)存儲(chǔ)數(shù)據(jù),@Table注解改為使用@Document注解;

@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)//此注解表示使用MongoDB來(lái)存儲(chǔ)數(shù)據(jù)

@Document(collection?="product")

@Erupt(

name?="商品管理",

orderBy?="sort"

)

publicclassPmsProduct{

//...省略若干代碼

}

接下來(lái)就是在菜單維護(hù)里面添加一個(gè)商品管理的菜單,刷新一下就可以看到該功能了。


在線接口開(kāi)發(fā)erupt-magic-api

最后再介紹一個(gè)神奇的功能,直接通過(guò)UI界面來(lái)開(kāi)發(fā)接口,無(wú)需定義Controller、Service、Dao、Mapper、XML、VO等Java對(duì)象!

在pom.xml中添加erupt-magic-api相關(guān)依賴;

<!--在線接口開(kāi)發(fā)?erupt-magic-api-->

xyz.erupt

erupt-magic-api

${erupt.version}

在application.yml中添加magic-api相關(guān)配置;

erupt:

#?設(shè)置具體哪些包被jackson消息轉(zhuǎn)化而不是gson

jacksonHttpMessageConvertersPackages:

-org.ssssssss

magic-api:

web:/magic/web

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

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

我們可以直接通過(guò)magic-api自己定義的腳本來(lái)實(shí)現(xiàn)查詢,比如下面這個(gè)腳本,用于查詢?nèi)科放疲?/p>

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

returndb.select(sql);

在接口配置菜單中直接添加該腳本即可實(shí)現(xiàn)品牌列表查詢接口,無(wú)需額外編寫(xiě)代碼;


在瀏覽器中直接訪問(wèn)接口,發(fā)現(xiàn)已經(jīng)自動(dòng)生成接口,是不是很棒!


總結(jié)

如果你的需求是搭建一個(gè)業(yè)務(wù)并不復(fù)雜的后臺(tái)管理系統(tǒng),Erupt是一個(gè)很好的選擇!它能讓你不寫(xiě)前端代碼!但是如果你的需求方對(duì)界面有很多要求,而你的業(yè)務(wù)邏輯又比較復(fù)雜的話那就要自己實(shí)現(xiàn)前端了!

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

項(xiàng)目源碼地址:

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Django知識(shí)點(diǎn)概述 Web應(yīng)用 問(wèn)題1:描述一個(gè)Web應(yīng)用的工作流程。 問(wèn)題2:描述項(xiàng)目的物理架構(gòu)。(上圖中補(bǔ)...
    領(lǐng)帶襯有黃金閱讀 818評(píng)論 0 1
  • 1、談?wù)剬?duì)http協(xié)議的認(rèn)識(shí)流程:1.域名解析域名解析檢查順序?yàn)椋簽g覽器自身DNS緩存---》OS自身的DNS緩存...
    Zzmi閱讀 874評(píng)論 0 0
  • 一、Django框架前言知識(shí): 1、C/S和B/S的區(qū)別: C/S結(jié)構(gòu)軟件:客戶端/服務(wù)端軟件,即客戶端要自己下載...
    月下獨(dú)酌123閱讀 5,151評(píng)論 0 36
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂愁,有人驚喜有人失落,有的覺(jué)得收獲滿滿有...
    陌忘宇閱讀 8,879評(píng)論 28 54
  • 信任包括信任自己和信任他人 很多時(shí)候,很多事情,失敗、遺憾、錯(cuò)過(guò),源于不自信,不信任他人 覺(jué)得自己做不成,別人做不...
    吳氵晃閱讀 6,390評(píng)論 4 8

友情鏈接更多精彩內(nèi)容