<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          再見前端!純 Java 擼個后臺管理系統(tǒng),這框架用起來賊爽!

          共 17251字,需瀏覽 35分鐘

           ·

          2021-07-05 17:05

          一個管理系統(tǒng),往往需要后端+前端一起實現(xiàn)。單表CRUD操作往往都差不多,我們可以使用代碼生成器來實現(xiàn)。有時候我們的管理系統(tǒng)只需要一些簡單的CRUD頁面,有沒有什么框架能做到不寫前端代碼,純Java擼個管理系統(tǒng)呢?這里推薦一個全棧類框架Erupt,希望對大家有所幫助!

          Erupt簡介

          Erupt是一個低代碼全棧類框架,它使用Java 注解動態(tài)生成頁面以及增、刪、改、查、權限控制等后臺功能。零前端代碼、零CURD、自動建表,僅需一個類文件 + 簡潔的注解配置,快速開發(fā)企業(yè)級后臺管理系統(tǒng)。

          基本使用

          我們首先來波實戰(zhàn),以商品品牌管理為例,來熟悉下Erupt結合SpringBoot的基本使用!

          SpringBoot整合Erupt

          由于Erupt原生支持SpringBoot,所以整合還是很方便的!

          • 為了方便管理Erupt版本,我們先在pom.xml中添加Erupt的版本屬性;
          <properties>
              <erupt.version>1.6.13</erupt.version>
          </properties>
          • 之后在pom.xml中添加Erupt的權限管理、數(shù)據(jù)安全、后臺WEB界面及MySQL驅動依賴;
          <dependencies>
              <!--用戶權限管理-->
              <dependency>
                  <groupId>xyz.erupt</groupId>
                  <artifactId>erupt-upms</artifactId>
                  <version>${erupt.version}</version>
              </dependency>
              <!--接口數(shù)據(jù)安全-->
              <dependency>
                  <groupId>xyz.erupt</groupId>
                  <artifactId>erupt-security</artifactId>
                  <version>${erupt.version}</version>
              </dependency>
              <!--后臺WEB界面-->
              <dependency>
                  <groupId>xyz.erupt</groupId>
                  <artifactId>erupt-web</artifactId>
                  <version>${erupt.version}</version>
              </dependency>
              <!--Mysql數(shù)據(jù)庫驅動-->
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>8.0.15</version>
              </dependency>
          </dependencies>
          • 修改項目的application.yml文件,添加數(shù)據(jù)源和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目錄下創(chuàng)建如下配置文件(拷貝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"})
          public class EruptConfig {
          }
          • 在MySQL中創(chuàng)建erupt數(shù)據(jù)庫,之后使用啟動類運行該項目,在erupt數(shù)據(jù)庫中會自動創(chuàng)建如下表;
          • 項目啟動成功后,可以直接訪登錄頁,默認賬號密碼erupt:erupt,項目訪問地址:http://localhost:8080/
          • 登錄成功后會跳轉到項目主頁,我們可以發(fā)現(xiàn)沒有寫一行前端代碼,卻擁有了完整的權限管理和字典管理功能,是不是很棒!

          實現(xiàn)單表 CRUD

          使用核心注解@Erupt@EruptField定義一個實體類即可快速完成CRUD操作,讓我們以商品品牌管理為例試試吧。

          • 不需要Controller、Service、Dao,僅僅一個實體類即可完成CRUD,首先我們創(chuàng)建實體類PmsBrand
          @Erupt(name = "商品品牌")
          @Table(name = "pms_brand")
          @Entity
          public class PmsBrand {

              @Id
              @GeneratedValue(generator = "generator")
              @GenericGenerator(name = "generator", strategy = "native")
              @Column(name = "id")
              @EruptField
              private Long id;

              @EruptField(
                      views = @View(title = "品牌名稱"),
                      edit = @Edit(title = "品牌名稱",notNull=true,search = @Search(vague = true))
              )
              private String name;

              @EruptField(
                      views = @View(title = "品牌首字母"),
                      edit = @Edit(title = "品牌首字母",notNull=true)
              )
              private String firstLetter;

              @EruptField(
                      views = @View(title = "品牌LOGO"),
                      edit = @Edit(title = "品牌LOGO", type = EditType.ATTACHMENT,
                              attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
              )
              private String logo;

              @EruptField(
                      views = @View(title = "品牌專區(qū)大圖"),
                      edit = @Edit(title = "品牌專區(qū)大圖", type = EditType.ATTACHMENT,
                              attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
              )
              private String bigPic;

              @EruptField(
                      views = @View(title = "品牌故事"),
                      edit = @Edit(title = "品牌故事")
              )
              private String brandStory;

              @EruptField(
                      views = @View(title = "排序"),
                      edit = @Edit(title = "排序")
              )
              private Integer sort;

              @EruptField(
                      views = @View(title = "是否顯示"),
                      edit = @Edit(title = "是否顯示")
              )
              private Boolean showStatus;

              @EruptField(
                      views = @View(title = "品牌制造商"),
                      edit = @Edit(title = "品牌制造商")
              )
              private Boolean factoryStatus;

              private Integer productCount;

              private Integer productCommentCount;

          }
          • 創(chuàng)建成功后重啟項目,在菜單維護中添加一個叫商品的一級菜單;
          • 然后再添加一個叫品牌管理的二級菜單,注意選擇好菜單類型上級菜單,輸入類型值為實體類的類名稱PmsBrand
          • 菜單添加成功后,刷新頁面,完整的品牌管理功能就出現(xiàn)了,來試下新增;
          • 再看下查詢列表頁面,可以發(fā)現(xiàn)我們通過@Edit注解,將實體類的字段轉換成了不同的輸入控件,比如文本框、圖片上傳框、單選框和數(shù)值框。

          核心注解說明

          幾個Erupt的核心注解,對照PmsBrand中的代碼學習即可!

          @Erupt

          • name:功能名稱
          • desc:功能描述

          @EruptField

          • views:表格展示配置
          • edit:編輯項配置
          • sort:前端展示順序,數(shù)字越小越靠前

          @View

          • title:表格列名稱
          • desc:表格列描述
          • type:數(shù)據(jù)展示形式,默認為AUTO,可以根據(jù)屬性類型自行推斷
          • show:是否顯示

          @Edit

          • title:表格列名稱
          • desc:表格列描述
          • type:編輯類型,默認為AUTO,可以根據(jù)屬性類型自行推斷
          • show:是否顯示
          • notNull:是否為必填項
          • search:是否支持搜索,search = @Search(vague = true)會啟用高級查詢策略

          擴展模塊

          當然Erupt的功能遠不止于此,還集成了很多實用的系統(tǒng)功能,包括定時任務、代碼生成器、系統(tǒng)監(jiān)控及NoSQL支持等。

          定時任務erupt-job

          通過定時任務功能,我們可以在代碼中定義好定時任務,然后在圖形化界面中操作任務,有點之前講過的PowerJob 的感覺!

          • 首先我們需要在pom.xml中添加erupt-job相關依賴;
          <!--定時任務erupt-job-->
          <dependency>
              <groupId>xyz.erupt</groupId>
              <artifactId>erupt-job</artifactId>
              <version>${erupt.version}</version>
          </dependency>
          • 之后在application.yml中添加郵件配置(否則啟動會報錯);
          spring:
            mail:
              username: [email protected]
              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
          • 之后創(chuàng)建一個定時任務實現(xiàn)類JobHandlerImpl,在exec方法中添加定時任務執(zhí)行代碼;
          /**
           * Created by macro on 2021/4/13.
           */

          @Service
          @Slf4j
          public class JobHandlerImpl implements EruptJobHandler {
              @Override
              public String exec(String code, String param) throws Exception {
                  log.info("定時任務已經(jīng)執(zhí)行,code:{},param:{}",code,param);
                  return "success";
              }
          }
          • 之后重新啟動應用,在任務維護中添加一個定時任務,每5秒執(zhí)行一次;
          • 添加成功后,定時任務開始執(zhí)行,點擊任務列表中的日志按鈕即可查看執(zhí)行日志。

          代碼生成器erupt-generator

          如果你覺得手寫實體類比較麻煩的話,還可以用用Erupt中的代碼生成器。

          • pom.xml中添加erupt-generator相關依賴;
          <!-- 代碼生成器 erupt-generator -->
          <dependency>
              <groupId>xyz.erupt</groupId>
              <artifactId>erupt-generator</artifactId>
              <version>${erupt.version}</version>
          </dependency>
          • 代碼生成菜單中我們可以像在Navicat中一樣,直接添加表和字段,從而生成實體類代碼;
          • 我們在添加過程中可以發(fā)現(xiàn),Erupt支持的編輯類型還挺多的,多達30種;
          • 添加成功后,點擊列表項的代碼預覽按鈕可以直接生成代碼,復制到自己項目下即可。

          系統(tǒng)監(jiān)控erupt-monitor

          通過使用Erupt的系統(tǒng)監(jiān)控功能,我們可以查看服務器的配置、Redis的緩存使用情況和在線用戶信息。

          • pom.xml中添加erupt-monitor相關依賴;
          <!--服務器監(jiān)控 erupt-monitor-->
          <dependency>
              <groupId>xyz.erupt</groupId>
              <artifactId>erupt-monitor</artifactId>
              <version>${erupt.version}</version>
          </dependency>
          • 由于需要使用到Redis,所以要在application.yml中添加Redis配置,并開啟Session的Redis存儲功能;
          spring:
            redis:
              host: localhost # Redis服務器地址
              database: 1 # Redis數(shù)據(jù)庫索引(默認為0)
              port: 6379 # Redis服務器連接端口
              password: 123456 # Redis服務器連接密碼(默認為空)
              timeout: 3000ms # 連接超時時間
          erupt:
            # 開啟redis方式存儲session,默認false,開啟后需在配置文件中添加redis配置
            redisSession: true
          • 通過服務監(jiān)控菜單,可以查看到服務器的CPU、內(nèi)存和Java虛擬機信息;
          • 通過緩存監(jiān)控菜單,可以查看到Redis信息、命令統(tǒng)計和Redis Key統(tǒng)計;
          • 通過在線用戶菜單,可以查看到在線用戶信息,還可以讓用戶強行退出!

          NoSQL數(shù)據(jù)源erupt-mongodb

          Erupt支持多種數(shù)據(jù)源,包括:MySQL、Oracle、PostgreSQL、H2,甚至支持 MongoDB。下面我們來體驗下MongoDB的支持功能。

          • pom.xml中添加erupt-mongodb相關依賴;
          <!--NoSQL數(shù)據(jù)源 erupt-mongodb-->
          <dependency>
              <groupId>xyz.erupt</groupId>
              <artifactId>erupt-mongodb</artifactId>
              <version>${erupt.version}</version>
          </dependency>
          • 由于需要使用到MongoDB,所以要在application.yml中添加MongoDB配置;
          spring:
            data:
              mongodb:
                host: localhost # mongodb的連接地址
                port: 27017 # mongodb的連接端口號
                database: erupt # mongodb的連接的數(shù)據(jù)庫
          • 以一個簡化版的商品管理為例,還是熟悉的套路,添加一個PmsProduct實體類;
          /**
           * Created by macro on 2021/4/13.
           */

          @EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  //此注解表示使用MongoDB來存儲數(shù)據(jù)
          @Document(collection = "product")
          @Erupt(
                  name = "商品管理",
                  orderBy = "sort"
          )
          public class PmsProduct {
              @Id
              @EruptField
              private String id;

              @EruptField(
                      views = @View(title = "商品名稱", sortable = true),
                      edit = @Edit(title = "商品名稱", search = @Search(vague = true))
              )
              private String name;

              @EruptField(
                      views = @View(title = "副標題", sortable = true),
                      edit = @Edit(title = "副標題", search = @Search(vague = true))
              )
              private String subTitle;

              @EruptField(
                      views = @View(title = "價格", sortable = true),
                      edit = @Edit(title = "價格")
              )
              private Double price;

              @EruptField(
                      views = @View(title = "商品圖片"),
                      edit = @Edit(title = "商品圖片", type = EditType.ATTACHMENT,
                              attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
              )
              private String pic;

              @EruptField(
                      views = @View(title = "狀態(tài)", sortable = true),
                      edit = @Edit(title = "狀態(tài)",
                              boolType = @BoolType(trueText = "上架", falseText = "下架"),
                              search = @Search)
              )
              private Boolean publishStatus;

              @EruptField(
                      views = @View(title = "創(chuàng)建時間", sortable = true),
                      edit = @Edit(title = "創(chuàng)建時間", search = @Search(vague = true))
              )
              private Date createTime;
          }
          • 與之前操作MySQL的區(qū)別是通過@EruptDataProcessor注解指定用MongoDB來存儲數(shù)據(jù),@Table注解改為使用@Document注解;
          @EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  //此注解表示使用MongoDB來存儲數(shù)據(jù)
          @Document(collection = "product")
          @Erupt(
                  name = "商品管理",
                  orderBy = "sort"
          )
          public class PmsProduct {
              //...省略若干代碼
          }
          • 接下來就是在菜單維護里面添加一個商品管理的菜單,刷新一下就可以看到該功能了。

          在線接口開發(fā)erupt-magic-api

          最后再介紹一個神奇的功能,直接通過UI界面來開發(fā)接口,無需定義Controller、Service、Dao、Mapper、XML、VO等Java對象!

          • pom.xml中添加erupt-magic-api相關依賴;
          <!--在線接口開發(fā) erupt-magic-api-->
          <dependency>
              <groupId>xyz.erupt</groupId>
              <artifactId>erupt-magic-api</artifactId>
              <version>${erupt.version}</version>
          </dependency>
          • application.yml中添加magic-api相關配置;
          erupt:
            # 設置具體哪些包被jackson消息轉化而不是gson
            jacksonHttpMessageConvertersPackages:
              - org.ssssssss

          magic-api:
            web: /magic/web
            # 接口配置文件存放路徑
            resource.location: D:/erupt/magic-script
          • 我們可以直接通過magic-api自己定義的腳本來實現(xiàn)查詢,比如下面這個腳本,用于查詢?nèi)科放疲?/section>
          var sql = "select * from pms_brand";    
          return db.select(sql);
          • 接口配置菜單中直接添加該腳本即可實現(xiàn)品牌列表查詢接口,無需額外編寫代碼;
          • 在瀏覽器中直接訪問接口,發(fā)現(xiàn)已經(jīng)自動生成接口,是不是很棒!

          總結

          如果你的需求是搭建一個業(yè)務并不復雜的后臺管理系統(tǒng),Erupt是一個很好的選擇!它能讓你不寫前端代碼!但是如果你的需求方對界面有很多要求,而你的業(yè)務邏輯又比較復雜的話那就要自己實現(xiàn)前端了!

          參考資料

          官方文檔:https://www.yuque.com/erupts/erupt

          項目源碼地址

          https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-erupt



          關注 Stephen,一起學習,一起成長。

          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大鸡吧一区 | 色综合小说| AV黄色天堂 | 91人妻在线视频 | 男女啪啪国产免费网站 |