3分鐘純 Java 注解搭個(gè)管理系統(tǒng)的示例代碼
最近接觸到個(gè)新項(xiàng)目,發(fā)現(xiàn)它用了一個(gè)比較有意思的框架,可以說實(shí)現(xiàn)了我剛?cè)胄袝r(shí)候的夢想,所以這里馬不停蹄的和大家分享下。
在我剛開始工作接觸的項(xiàng)目都還沒做前后端分離,經(jīng)常需要后端來維護(hù)頁面,有時(shí)候覺得自己好像天生不適合干前端,你要是讓我研究研究后端的技術(shù),看個(gè)中間件源碼啊,分析分析什么框架底層原理啊,這都問題不大,偶爾搞一下JS
也可以。你要是讓我寫個(gè)css
樣式,那簡直要命了,一點(diǎn)也提不起興趣,不知道有沒有跟我一樣的。
今天要介紹的框架直接不用寫頁面了,話不多說,下邊咱們直奔主題
Erupt
一個(gè)通用后臺管理框架,據(jù)說有 超低代碼量、 零前端代碼、零 CURD操作、無需建表,純Java注解開發(fā)等特色,號稱三分鐘就可以搭建一個(gè)完整的后臺管理系統(tǒng)。
額~ 聽著好像還挺流批的,到底是不是有這么魔幻,咱們一起用起來感受下。
首先來搭建一下環(huán)境,目前Erupt
支持Java
版本1.8.0
及以上、Spring Boot
版本2.0
及其以上。
搭建easy
pom.xml
引入必要的jar
包
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--用戶權(quán)限管理--> <dependency> <groupId>xyz.erupt</groupId> <artifactId>erupt-upms</artifactId> <version>1.6.7</version> </dependency> <!--接口數(shù)據(jù)安全--> <dependency> <groupId>xyz.erupt</groupId> <artifactId>erupt-security</artifactId> <version>1.6.7</version> </dependency> <!--后臺WEB界面--> <dependency> <groupId>xyz.erupt</groupId> <artifactId>erupt-web</artifactId> <version>1.6.7</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>compile</scope> </dependency> </dependencies>
application.yml
文件只要簡單配置數(shù)據(jù)源就好,提前準(zhǔn)備個(gè)數(shù)據(jù)庫,說到數(shù)據(jù)庫這里我說個(gè)小插曲。
我之前在Github
提交案例代碼的時(shí)候(https://github.com/chengxy-nds/Springboot-Notebook
),由于沒太注意沒屏蔽敏感信息,導(dǎo)致云數(shù)據(jù)庫賬號泄露了,最近我發(fā)現(xiàn)已經(jīng)有小伙伴在數(shù)據(jù)庫上跑項(xiàng)目了,仔細(xì)看了看里邊的數(shù)據(jù)結(jié)構(gòu),發(fā)現(xiàn)像是個(gè)畢設(shè)項(xiàng)目。
本身這個(gè)庫就是我跑demo
案例的一個(gè)測試庫,為的就是讓小伙伴能把更多時(shí)間放在研究案例的技術(shù)點(diǎn)上,減少搭建環(huán)境這種沒技術(shù)含量的瑣碎事。
發(fā)現(xiàn)歸發(fā)現(xiàn),這里我沒改密碼,也沒刪他們的庫,如果你要用就繼續(xù)用著,但玩歸玩,鬧歸鬧,你不能亂動(dòng)不是你的數(shù)據(jù)!影響其他人學(xué)習(xí)就不好了。
spring: datasource: url: jdbc:mysql://47.93.6.5:3306/erupt2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: 123456 jpa: show-sql: true generate-ddl: true database-platform: org.hibernate.dialect.MySQL5InnoDBDialect database: mysql profiles: active: dev mail: username: xxxx@qq.com password: xxxxxxx host: smtp.qq.com properties: mail.smtp.ssl.auth: true mail.smtp.ssl.enable: true mail.smtp.ssl.required: true server: port: 8888
說了點(diǎn)題外話,我們繼續(xù)搞起~
其實(shí)到這Erupt
的環(huán)境就搭建完了,額~ ,這就完了?
咱們什么也沒干,項(xiàng)目是個(gè)空殼子,一行代碼也沒寫,好像連個(gè)表也沒建啊!
別著急咱們先啟動(dòng)下項(xiàng)目,看到控制臺打印出很多建表語句和插入語句,這是因?yàn)?code>Erupt框架底層應(yīng)用JPA
持久化,預(yù)置創(chuàng)建了一些系統(tǒng)表和數(shù)據(jù)。
注意:Erupt
預(yù)置表只會(huì)隨項(xiàng)目第一次啟動(dòng)構(gòu)建一次,如果想重新創(chuàng)建,需刪除.Erupt
文件(一般在項(xiàng)目的工作空間內(nèi)),獲取文件位置方式
System.getProperty("user.dir")
再看數(shù)據(jù)庫里創(chuàng)建了16張系統(tǒng)表,其中e_upms_user
表是用戶表,默認(rèn)只有一個(gè)管理員賬號,用戶名、密碼都是erupt
。
緊接著我們訪問http://127.0.0.1:8888/
,看一下是個(gè)什么效果,竟然有個(gè)完整的登錄頁面。
用上邊的用戶名、密碼直接登錄,erupt
已經(jīng)預(yù)先實(shí)現(xiàn)了完整的權(quán)限控等功能,而到這我們幾乎是沒寫過什么代碼的,都是框架封裝好了的,菜單類數(shù)據(jù)全部從數(shù)據(jù)庫動(dòng)態(tài)獲取,一個(gè)基礎(chǔ)的后臺管理系統(tǒng)就搭建完了,有點(diǎn)哇塞。
有趣的頁面
那么問題來了?想要自定義頁面怎么辦?
開篇我們就說過erupt
是零前端代碼,全部基于Java
注解開發(fā)的,接下來用Java
注解寫個(gè)簡單頁面體驗(yàn)下。
erupt
有兩個(gè)核心注解@Erupt
,@EruptField
@Erupt
注解修飾類,代表定義一個(gè)頁面@EruptField
注解修飾字段,代表頁面上顯示的字段名@Power
注解控制是否操作按鈕,增、刪、改、查、導(dǎo)入、導(dǎo)出等@Search
注解表示字段為搜索條件@Table
注解表示頁面取數(shù)據(jù)對應(yīng)的表,如果不設(shè)置,頁面第一次初始化的時(shí)候,會(huì)根據(jù)類字段值自動(dòng)創(chuàng)建一張和類名一致的表名。
注解類型比較多,不一一列舉了,更多的自己到官網(wǎng)瞅:https://www.erupt.xyz
下邊我們定義一個(gè)Student
類,加上@Erupt
,@EruptField
注解,這樣頁面和元素就算寫完了,是不是有點(diǎn)顛覆認(rèn)知。
/* * @Erupt注解修飾在類上,@EruptField注解修飾在字段上 * 其他注解均為Jpa注解 */ @Getter @Setter @Erupt(name = "學(xué)生表", power = @Power(importable = true, export = true) ) @Entity //@Table(name = "t_student") public class Student extends BaseModel { @EruptField( views = @View(title = "學(xué)生姓名"), edit = @Edit(title = "學(xué)生姓名", notNull = true, search = @Search(vague = true)) ) private String studentName; @EruptField( views = @View(title = "所屬班級"), edit = @Edit(title = "所屬班級", notNull = true) ) private String studentClass; @EruptField( views = @View(title = "學(xué)生年齡"), edit = @Edit(title = "學(xué)生年齡", notNull = true) ) private String studentAge; @Lob @EruptField( views = @View(title = "學(xué)生性別"), edit = @Edit(title = "學(xué)生性別", notNull = true) ) private String studentSex; @EruptField( views = @View(title = "考核狀態(tài)"), edit = @Edit(title = "考核狀態(tài)", notNull = true, boolType = @BoolType(trueText = "通過", falseText = "掛科"), search = @Search) ) private Boolean status; }
但此時(shí)新創(chuàng)建的頁面不會(huì)顯示出來,還需要我們手動(dòng)做一個(gè)映射關(guān)系,在菜單維護(hù)中自定義個(gè)菜單,類型值一定要為新建的 類名 Student
。
保存刷新后會(huì)看到我們的新頁面出現(xiàn)了,而且頁面的功能很完整,基礎(chǔ)操作、查詢、導(dǎo)入、導(dǎo)出功能都自動(dòng)實(shí)現(xiàn)了。
頁面新增一個(gè)學(xué)生信息,對應(yīng)的Student
表也多了條記錄,而這個(gè)持久化的過程完全由框架來做。
盡管Erupt
框架對前后端代碼做了深度封裝,但它提供了豐富靈活的自定義接口,來滿足我們的個(gè)性化需求。
比如我們在錄入新學(xué)生信息時(shí),希望屏蔽名字為張三
的同學(xué),可以對頁面按鈕功能做代理dataProxy
,實(shí)現(xiàn)自定義的邏輯,對哪個(gè)按鈕代理就實(shí)現(xiàn)對應(yīng)方法即可,如beforeAdd
、afterAdd
是對新增按鈕的代理。
@Getter @Setter @Erupt(name = "學(xué)生表",dataProxy = {StudentDataProxy.class}, power = @Power(importable = true, export = true) ) @Entity //@Table(name = "t_student") public class Student extends BaseModel { } public class StudentDataProxy implements DataProxy<Student> { @Override public void beforeAdd(Student student) { //后臺字段校驗(yàn) if ("張三".equals(student.getStudentName())) { throw new EruptApiErrorTip("名稱禁止為張三!"); } } @Override public void afterAdd(Student student) { } @Override public void afterUpdate(Student student) { } @Override public void afterDelete(Student student) { } }
當(dāng)我們在頁面錄入名字為張三
的同學(xué)時(shí),成功屏蔽。其他類似的功能還有很多,這里就不一一舉例了,看文檔看文檔~
如果我們想要按傳統(tǒng)的方式開發(fā)接口,不用擔(dān)心會(huì)和Erupt
的頁面生成規(guī)則有沖突,絲毫不會(huì)受影響。而且Erupt
內(nèi)部集成了JPA
,提供了現(xiàn)成的dao
接口,只要調(diào)用對應(yīng)API即可上手開發(fā)。
如果你不想手寫Java
代碼也沒關(guān)系,Erupt
還提供了代碼生成器,自定義Java
類名和字段名,可以生成代碼,直接copy
就行了。
說到這我只介紹了Erupt
一丟丟的基礎(chǔ)特性,主要是想讓小伙伴知道有這么個(gè)敏捷利器。
不僅如此它還支持豐富的數(shù)據(jù)類型,內(nèi)置了像定時(shí)任務(wù)管理
、多表聯(lián)合查詢
、前后端分離部署
、接口權(quán)限
、操作記錄
、多數(shù)據(jù)源
、郵件系統(tǒng)
、黑白名單
等等很多實(shí)用功能,都直接調(diào)用API就可以用。
說在后邊
Erupt
框架的優(yōu)點(diǎn)是顯而易見的,快捷、高效、上手容易,對新手相當(dāng)?shù)挠押茫趯?shí)際生產(chǎn)環(huán)境中我只是用它來做一些配置字典類的數(shù)據(jù)管理。
因?yàn)樗纳疃确庋b雖然讓開發(fā)變的簡單高效,可對于業(yè)務(wù)相對復(fù)雜、高度定制的系統(tǒng)來說,Erupt
框架顯得力不從心,更關(guān)鍵的一點(diǎn),它的社區(qū)并不算特別活躍,畢竟是個(gè)小眾框架。
不過,技術(shù)從來都是服務(wù)于業(yè)務(wù)的,如果你的業(yè)務(wù)與Erupt
的氣質(zhì)相匹配,別猶豫,用它!
到此這篇關(guān)于3分鐘純 Java 注解搭個(gè)管理系統(tǒng)的示例代碼的文章就介紹到這了,更多相關(guān)Java 注解搭個(gè)管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用IDEA創(chuàng)建Java Web項(xiàng)目并部署訪問的圖文教程
本文通過圖文并茂的形式給大家介紹了使用IDEA創(chuàng)建Java Web項(xiàng)目并部署訪問的教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08SpringBoot在啟動(dòng)類main方法中調(diào)用service層方法報(bào)“空指針異?!暗慕鉀Q辦法
這篇文章主要介紹了SpringBoot在啟動(dòng)類main方法中調(diào)用service層方法報(bào)“空指針異常“的解決辦法,大多數(shù)情況下,我們使用Springboot是創(chuàng)建一個(gè)maven項(xiàng)目,然后通過controller層的接口調(diào)用,但也有特殊情況,文章介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06Java的synchronized關(guān)鍵字深入解析
這篇文章主要介紹了Java的synchronized關(guān)鍵字深入解析,在并發(fā)編程中,多線程同時(shí)并發(fā)訪問的資源叫做臨界資源,當(dāng)多個(gè)線程同時(shí)訪問對象并要求操作相同資源時(shí),分割了原子操作就有可能出現(xiàn)數(shù)據(jù)的不一致或數(shù)據(jù)不完整的情況,需要的朋友可以參考下2023-12-12一文解決System.in關(guān)閉后無法再繼續(xù)使用流的問題
這篇文章主要給大家介紹如何解決System.in關(guān)閉后無法再繼續(xù)使用流的問題,文中有詳細(xì)的解決方法和代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07詳解MyBatis-Plus updateById方法更新不了空字符串/null解決方法
這篇文章主要介紹了詳解MyBatis-Plus updateById方法更新不了空字符串/null解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09ReentrantLock條件變量使多個(gè)線程順序執(zhí)行
這篇文章主要為大家介紹了ReentrantLock條件變量使多個(gè)線程順序執(zhí)行,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例
這篇文章主要介紹了使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09