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