后端系統全棧框架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)會啟用高級查詢策略

擴展模塊

當然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閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • Django知識點概述 Web應用 問題1:描述一個Web應用的工作流程。 問題2:描述項目的物理架構。(上圖中補...
    領帶襯有黃金閱讀 713評論 0 1
  • 1、談談對http協議的認識流程:1.域名解析域名解析檢查順序為:瀏覽器自身DNS緩存---》OS自身的DNS緩存...
    Zzmi閱讀 739評論 0 0
  • 一、Django框架前言知識: 1、C/S和B/S的區別: C/S結構軟件:客戶端/服務端軟件,即客戶端要自己下載...
    月下獨酌123閱讀 4,614評論 0 36
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,578評論 28 53
  • 信任包括信任自己和信任他人 很多時候,很多事情,失敗、遺憾、錯過,源于不自信,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,208評論 4 8