天天看點

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

大家好,我是小富~

最近接觸到個新項目,發現它用了一個比較有意思的架構,可以說實作了我剛入行時候的夢想,是以這裡馬不停蹄的和大家分享下。

在我剛開始工作接觸的項目都還沒做前後端分離,經常需要後端來維護頁面,有時候覺得自己好像天生不适合幹前端,你要是讓我研究研究後端的技術,看個中間件源碼啊,分析分析什麼架構底層原理啊,這都問題不大,偶爾搞一下

JS

也可以。你要是讓我寫個

css

樣式,那簡直要命了,一點也提不起興趣,不知道有沒有跟我一樣的。

今天要介紹的架構直接不用寫頁面了,話不多說,下邊咱們直奔主題

Erupt

一個通用背景管理架構,據說有 超低代碼量、 零前端代碼、零 CURD操作、無需建表,純Java注解開發等特色,号稱三分鐘就可以搭建一個完整的背景管理系統。

額~ 聽着好像還挺流批的,到底是不是有這麼魔幻,咱們一起用起來感受下。

首先來搭建一下環境,目前

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>
        <!--使用者權限管理-->
        <dependency>
            <groupId>xyz.erupt</groupId>
            <artifactId>erupt-upms</artifactId>
            <version>1.6.7</version>
        </dependency>
        <!--接口資料安全-->
        <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

檔案隻要簡單配置資料源就好,提前準備個資料庫,說到資料庫這裡我說個小插曲。

我之前在

Github

送出案例代碼的時候(

https://github.com/chengxy-nds/Springboot-Notebook

),由于沒太注意沒屏蔽敏感資訊,導緻雲資料庫賬号洩露了,最近我發現已經有小夥伴在資料庫上跑項目了,仔細看了看裡邊的資料結構,發現像是個畢設項目。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

本身這個庫就是我跑

demo

案例的一個測試庫,為的就是讓小夥伴能把更多時間放在研究案例的技術點上,減少搭建環境這種沒技術含量的瑣碎事。

發現歸發現,這裡我沒改密碼,也沒删他們的庫,如果你要用就繼續用着,但玩歸玩,鬧歸鬧,你不能亂動不是你的資料!影響其他人學習就不好了。

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: [email protected]
    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           

說了點題外話,我們繼續搞起~

其實到這

Erupt

的環境就搭建完了,額~ ,這就完了?

咱們什麼也沒幹,項目是個空殼子,一行代碼也沒寫,好像連個表也沒建啊!

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

别着急咱們先啟動下項目,看到控制台列印出很多建表語句和插入語句,這是因為

Erupt

架構底層應用

JPA

持久化,預置建立了一些系統表和資料。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

注意:

Erupt

預置表隻會随項目第一次啟動建構一次,如果想重新建立,需删除

.Erupt

檔案(一般在項目的工作空間内),擷取檔案位置方式

System.getProperty("user.dir")           

再看資料庫裡建立了16張系統表,其中

e_upms_user

表是使用者表,預設隻有一個管理者賬号,使用者名、密碼都是

erupt

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

緊接着我們通路

http://127.0.0.1:8888/

,看一下是個什麼效果,竟然有個完整的登入頁面。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

用上邊的使用者名、密碼直接登入,

erupt

已經預先實作了完整的權限控等功能,而到這我們幾乎是沒寫過什麼代碼的,都是架構封裝好了的,菜單類資料全部從資料庫動态擷取,一個基礎的背景管理系統就搭建完了,有點哇塞。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

有趣的頁面

那麼問題來了?想要自定義頁面怎麼辦?

開篇我們就說過

erupt

是零前端代碼,全部基于

Java

注解開發的,接下來用

Java

注解寫個簡單頁面體驗下。

erupt

有兩個核心注解

@Erupt

@EruptField

  • @Erupt

    注解修飾類,代表定義一個頁面
  • @EruptField

    注解修飾字段,代表頁面上顯示的字段名
  • @Power

    注解控制是否操作按鈕,增、删、改、查、導入、導出等
  • @Search

    注解表示字段為搜尋條件
  • @Table

    注解表示頁面取資料對應的表,如果不設定,頁面第一次初始化的時候,會根據類字段值自動建立一張和類名一緻的表名。
注解類型比較多,不一一列舉了,更多的自己到官網瞅:

https://www.erupt.xyz

下邊我們定義一個

Student

類,加上

@Erupt

@EruptField

注解,這樣頁面和元素就算寫完了,是不是有點颠覆認知。

/*
 *  @Erupt注解修飾在類上,@EruptField注解修飾在字段上
 *  其他注解均為Jpa注解
 */
@Getter
@Setter
@Erupt(name = "學生表",
        power = @Power(importable = true, export = true)
)
@Entity
//@Table(name = "t_student")
public class Student extends BaseModel {

    @EruptField(
            views = @View(title = "學生姓名"),
            edit = @Edit(title = "學生姓名", 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 = "學生年齡"),
            edit = @Edit(title = "學生年齡", notNull = true)
    )
    private String studentAge;

    @Lob
    @EruptField(
            views = @View(title = "學生性别"),
            edit = @Edit(title = "學生性别", notNull = true)
    )
    private String studentSex;

    @EruptField(
            views = @View(title = "考核狀态"),
            edit = @Edit(title = "考核狀态", notNull = true, boolType = @BoolType(trueText = "通過", falseText = "挂科"), search = @Search)
    )
    private Boolean status;
}           

但此時新建立的頁面不會顯示出來,還需要我們手動做一個映射關系,在菜單維護中自定義個菜單,類型值一定要為建立的 類名

Student

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

儲存重新整理後會看到我們的新頁面出現了,而且頁面的功能很完整,基礎操作、查詢、導入、導出功能都自動實作了。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

頁面新增一個學生資訊,對應的

Student

表也多了條記錄,而這個持久化的過程完全由架構來做。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

盡管

Erupt

架構對前後端代碼做了深度封裝,但它提供了豐富靈活的自定義接口,來滿足我們的個性化需求。

比如我們在錄入新學生資訊時,希望屏蔽名字為

張三

的同學,可以對頁面按鈕功能做代理

dataProxy

,實作自定義的邏輯,對哪個按鈕代理就實作對應方法即可,如

beforeAdd

afterAdd

是對新增按鈕的代理。

@Getter
@Setter
@Erupt(name = "學生表",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) {
        //背景字段校驗
        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) {
    }
 }           

當我們在頁面錄入名字為

張三

的同學時,成功屏蔽。其他類似的功能還有很多,這裡就不一一舉例了,看文檔看文檔~

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

如果我們想要按傳統的方式開發接口,不用擔心會和

Erupt

的頁面生成規則有沖突,絲毫不會受影響。而且

Erupt

内部內建了

JPA

,提供了現成的

dao

接口,隻要調用對應API即可上手開發。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

如果你不想手寫

Java

代碼也沒關系,

Erupt

還提供了代碼生成器,自定義

Java

類名和字段名,可以生成代碼,直接

copy

就行了。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥
幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

說到這我隻介紹了

Erupt

一丢丢的基礎特性,主要是想讓小夥伴知道有這麼個靈活利器。

不僅如此它還支援豐富的資料類型,内置了像定時

任務管理

多表聯合查詢

前後端分離部署

接口權限

操作記錄

多資料源

郵件系統

黑白名單

等等很多實用功能,都直接調用API就可以用。

幹掉前端!3分鐘純 Java 注解搭個管理系統,我直接好家夥

說在後邊

Erupt

架構的優點是顯而易見的,快捷、高效、上手容易,對新手相當的友好,但在實際生産環境中我隻是用它來做一些配置字典類的資料管理。

因為它的深度封裝雖然讓開發變的簡單高效,可對于業務相對複雜、高度定制的系統來說,

Erupt

架構顯得力不從心,更關鍵的一點,它的社群并不算特别活躍,畢竟是個小衆架構。

不過,技術從來都是服務于業務的,如果你的業務與

Erupt

的氣質相比對,别猶豫,用它!

整理了幾百本各類技術電子書,有需要的同學公号[ 程式員内點事 ]内回複[ 666 ]自取。技術群快滿了,想進的同學可以加我好友,和大佬們一起吹吹技術。