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