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 ),由於沒太註意沒屏蔽敏感信息,導致雲數據庫賬號泄露瞭,最近我發現已經有小夥伴在數據庫上跑項目瞭,仔細看瞭看裡邊的數據結構,發現像是個畢設項目。

本身這個庫就是我跑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的環境就搭建完瞭,額~ ,這就完瞭?

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

別著急咱們先啟動下項目,看到控制臺打印出很多建表語句和插入語句,這是因為Erupt框架底層應用JPA持久化,預置創建瞭一些系統表和數據。

註意:Erupt預置表隻會隨項目第一次啟動構建一次,如果想重新創建,需刪除.Erupt文件(一般在項目的工作空間內),獲取文件位置方式

System.getProperty("user.dir")

再看數據庫裡創建瞭16張系統表,其中e_upms_user表是用戶表,默認隻有一個管理員賬號,用戶名、密碼都是erupt

緊接著我們訪問http://127.0.0.1:8888/,看一下是個什麼效果,竟然有個完整的登錄頁面。

用上邊的用戶名、密碼直接登錄,erupt已經預先實現瞭完整的權限控等功能,而到這我們幾乎是沒寫過什麼代碼的,都是框架封裝好瞭的,菜單類數據全部從數據庫動態獲取,一個基礎的後臺管理系統就搭建完瞭,有點哇塞。

有趣的頁面

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

開篇我們就說過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

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

頁面新增一個學生信息,對應的Student表也多瞭條記錄,而這個持久化的過程完全由框架來做。

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

比如我們在錄入新學生信息時,希望屏蔽名字為張三的同學,可以對頁面按鈕功能做代理dataProxy,實現自定義的邏輯,對哪個按鈕代理就實現對應方法即可,如beforeAddafterAdd是對新增按鈕的代理。

@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) {
  }
 }

當我們在頁面錄入名字為張三的同學時,成功屏蔽。其他類似的功能還有很多,這裡就不一一舉例瞭,看文檔看文檔~

如果我們想要按傳統的方式開發接口,不用擔心會和Erupt的頁面生成規則有沖突,絲毫不會受影響。而且Erupt內部集成瞭JPA,提供瞭現成的dao接口,隻要調用對應API即可上手開發。

如果你不想手寫Java代碼也沒關系,Erupt還提供瞭代碼生成器,自定義Java類名和字段名,可以生成代碼,直接copy就行瞭。

說到這我隻介紹瞭Erupt一丟丟的基礎特性,主要是想讓小夥伴知道有這麼個敏捷利器。

不僅如此它還支持豐富的數據類型,內置瞭像定時任務管理多表聯合查詢前後端分離部署接口權限操作記錄多數據源郵件系統黑白名單等等很多實用功能,都直接調用API就可以用。

說在後邊

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

因為它的深度封裝雖然讓開發變的簡單高效,可對於業務相對復雜、高度定制的系統來說,Erupt 框架顯得力不從心,更關鍵的一點,它的社區並不算特別活躍,畢竟是個小眾框架。

不過,技術從來都是服務於業務的,如果你的業務與Erupt的氣質相匹配,別猶豫,用它!

到此這篇關於3分鐘純 Java 註解搭個管理系統的示例代碼的文章就介紹到這瞭,更多相關Java 註解搭個管理系統內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!