天天看點

3分鐘純 Java 注解搭個管理系統的示例代碼

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

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

JS

也可以。你要是讓我寫個

css

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

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

Erupt

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

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

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

Erupt

支援

Java

版本

1.8.0

及以上、

Spring Boot

版本

2.0

及其以上。

搭建easy

pom.xml

引入必要的

jar

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<

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

 送出案例代碼的時候(http://u3v.cn/64LZXz),由于沒太注意沒屏蔽敏感資訊,導緻雲資料庫賬号洩露了,最近我發現已經有小夥伴在資料庫上跑項目了,仔細看了看裡邊的資料結構,發現像是個畢設項目。

3分鐘純 Java 注解搭個管理系統的示例代碼

本身這個庫就是我跑

demo

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

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

1

System.getProperty(

"user.dir"

)

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

e_upms_user

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

erupt

3分鐘純 Java 注解搭個管理系統的示例代碼

緊接着我們通路http://u6v.cn/5PJCgL,看一下是個什麼效果,竟然有個完整的登入頁面。

3分鐘純 Java 注解搭個管理系統的示例代碼

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

erupt

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

3分鐘純 Java 注解搭個管理系統的示例代碼

有趣的頁面

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

開篇我們就說過

erupt

是零前端代碼,全部基于

Java

注解開發的,接下來用

Java

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

erupt

有兩個核心注解

@Erupt

@EruptField

  • @Erupt

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

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

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

    @Search

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

    注解表示頁面取資料對應的表,如果不設定,頁面第一次初始化的時候,會根據類字段值自動建立一張和類名一緻的表名。

注解類型比較多,不一一列舉了,更多的自己到官網瞅:

https://www.erupt.xyz

下邊我們定義一個

Student

類,加上

@Erupt

@EruptField

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

/*

* @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

是對新增按鈕的代理。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

@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

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