• 纯 Java 撸个后台管理系统,这框架用起来贼好


    一个管理系统,往往需要后端+前端一起实现。单表CRUD操作往往都差不多,我们可以使用代码生成器来实现。有时候我们的管理系统只需要一些简单的CRUD页面,有没有什么框架能做到不写前端代码,纯Java撸个管理系统呢?这里推荐一个全栈类框架Erupt,希望对大家有所帮助!

    Erupt简介

    Erupt是一个低代码全栈类框架,它使用Java 注解动态生成页面以及增、删、改、查、权限控制等后台功能。零前端代码、零CURD、自动建表,仅需一个类文件 + 简洁的注解配置,快速开发企业级后台管理系统

    基本使用

    我们首先来波实战,以商品品牌管理为例,来熟悉下Erupt结合SpringBoot的基本使用!

    SpringBoot整合Erupt

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

    • 为了方便管理Erupt版本,我们先在pom.xml中添加Erupt的版本属性;
    1. <properties>
    2.     <erupt.version>1.6.13</erupt.version>
    3. </properties>
    • 之后在pom.xml中添加Erupt的权限管理、数据安全、后台WEB界面及MySQL驱动依赖;
    1. <dependencies>
    2.     <!--用户权限管理-->
    3.     <dependency>
    4.         <groupId>xyz.erupt</groupId>
    5.         <artifactId>erupt-upms</artifactId>
    6.         <version>${erupt.version}</version>
    7.     </dependency>
    8.     <!--接口数据安全-->
    9.     <dependency>
    10.         <groupId>xyz.erupt</groupId>
    11.         <artifactId>erupt-security</artifactId>
    12.         <version>${erupt.version}</version>
    13.     </dependency>
    14.     <!--后台WEB界面-->
    15.     <dependency>
    16.         <groupId>xyz.erupt</groupId>
    17.         <artifactId>erupt-web</artifactId>
    18.         <version>${erupt.version}</version>
    19.     </dependency>
    20.     <!--Mysql数据库驱动-->
    21.     <dependency>
    22.         <groupId>mysql</groupId>
    23.         <artifactId>mysql-connector-java</artifactId>
    24.         <version>8.0.15</version>
    25.     </dependency>
    26. </dependencies>
    • 修改项目的application.yml文件,添加数据源和JPA配置;
    1. spring:
    2.   datasource:
    3.     url: jdbc:mysql://localhost:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    4.     username: root
    5.     password: root
    6.   jpa:
    7.     show-sqltrue
    8.     generate-ddl: true
    9.     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    10.     database: mysql
    • 在项目的resources目录下创建如下配置文件(拷贝mall-tiny-erupt中的即可);

    • 添加Erupt的Java配置类EruptConfig,以启动类MallTinyApplication的包为准,配置包扫码路径;
    1. /**
    2.  * Created by macro on 2021/4/13.
    3.  */
    4. @Configuration
    5. @ComponentScan({"xyz.erupt","com.macro.mall.tiny"})
    6. @EntityScan({"xyz.erupt","com.macro.mall.tiny"})
    7. @EruptScan({"xyz.erupt","com.macro.mall.tiny"})
    8. public class EruptConfig {
    9. }
    • 在MySQL中创建erupt数据库,之后使用启动类运行该项目,在erupt数据库中会自动创建如下表;

    • 项目启动成功后,可以直接访登录页,默认账号密码erupt:erupt,项目访问地址:http://localhost:8080/

    • 登录成功后会跳转到项目主页,我们可以发现没有写一行前端代码,却拥有了完整的权限管理和字典管理功能,是不是很棒!

    实现单表 CRUD

    使用核心注解@Erupt和@EruptField定义一个实体类即可快速完成CRUD操作,让我们以商品品牌管理为例试试吧。

    • 不需要Controller、Service、Dao,仅仅一个实体类即可完成CRUD,首先我们创建实体类PmsBrand;
    1. @Erupt(name = "商品品牌")
    2. @Table(name = "pms_brand")
    3. @Entity
    4. public class PmsBrand {
    5.     @Id
    6.     @GeneratedValue(generator = "generator")
    7.     @GenericGenerator(name = "generator", strategy = "native")
    8.     @Column(name = "id")
    9.     @EruptField
    10.     private Long id;
    11.     @EruptField(
    12.             views = @View(title = "品牌名称"),
    13.             edit = @Edit(title = "品牌名称",notNull=true,search = @Search(vague = true))
    14.     )
    15.     private String name;
    16.     @EruptField(
    17.             views = @View(title = "品牌首字母"),
    18.             edit = @Edit(title = "品牌首字母",notNull=true)
    19.     )
    20.     private String firstLetter;
    21.     @EruptField(
    22.             views = @View(title = "品牌LOGO"),
    23.             edit = @Edit(title = "品牌LOGO"type = EditType.ATTACHMENT,
    24.                     attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
    25.     )
    26.     private String logo;
    27.     @EruptField(
    28.             views = @View(title = "品牌专区大图"),
    29.             edit = @Edit(title = "品牌专区大图"type = EditType.ATTACHMENT,
    30.                     attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
    31.     )
    32.     private String bigPic;
    33.     @EruptField(
    34.             views = @View(title = "品牌故事"),
    35.             edit = @Edit(title = "品牌故事")
    36.     )
    37.     private String brandStory;
    38.     @EruptField(
    39.             views = @View(title = "排序"),
    40.             edit = @Edit(title = "排序")
    41.     )
    42.     private Integer sort;
    43.     @EruptField(
    44.             views = @View(title = "是否显示"),
    45.             edit = @Edit(title = "是否显示")
    46.     )
    47.     private Boolean showStatus;
    48.     @EruptField(
    49.             views = @View(title = "品牌制造商"),
    50.             edit = @Edit(title = "品牌制造商")
    51.     )
    52.     private Boolean factoryStatus;
    53.     private Integer productCount;
    54.     private Integer productCommentCount;
    55. }
    • 创建成功后重启项目,在菜单维护中添加一个叫商品的一级菜单;

    • 然后再添加一个叫品牌管理的二级菜单,注意选择好菜单类型和上级菜单,输入类型值为实体类的类名称PmsBrand;

    • 菜单添加成功后,刷新页面,完整的品牌管理功能就出现了,来试下新增;

    • 再看下查询列表页面,可以发现我们通过@Edit注解,将实体类的字段转换成了不同的输入控件,比如文本框、图片上传框、单选框和数值框。

    核心注解说明

    几个Erupt的核心注解,对照PmsBrand中的代码学习即可!

    @Erupt

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

    @EruptField

    • views:表格展示配置
    • edit:编辑项配置
    • sort:前端展示顺序,数字越小越靠前

    @View

    • title:表格列名称
    • desc:表格列描述
    • type:数据展示形式,默认为AUTO,可以根据属性类型自行推断
    • show:是否显示

    @Edit

    • title:表格列名称
    • desc:表格列描述
    • type:编辑类型,默认为AUTO,可以根据属性类型自行推断
    • show:是否显示
    • notNull:是否为必填项
    • search:是否支持搜索,search = @Search(vague = true)会启用高级查询策略

    扩展模块

    当然Erupt的功能远不止于此,还集成了很多实用的系统功能,包括定时任务、代码生成器、系统监控及NoSQL支持等。

    定时任务erupt-job

    通过定时任务功能,我们可以在代码中定义好定时任务,然后在图形化界面中操作任务,有点之前讲过的PowerJob 的感觉!

    • 首先我们需要在pom.xml中添加erupt-job相关依赖;
    1. <!--定时任务erupt-job-->
    2. <dependency>
    3.     <groupId>xyz.erupt</groupId>
    4.     <artifactId>erupt-job</artifactId>
    5.     <version>${erupt.version}</version>
    6. </dependency>
    • 之后在application.yml中添加邮件配置(否则启动会报错);
    1. spring:
    2.   mail:
    3.     username: xxxxxx@qq.com
    4.     password: 123456
    5.     host: smtp.exmail.qq.com
    6.     port: 465
    7.     properties:
    8.       mail.smtp.ssl.auth: true
    9.       mail.smtp.ssl.enable: true
    10.       mail.smtp.ssl.required: true
    • 之后创建一个定时任务实现类JobHandlerImpl,在exec方法中添加定时任务执行代码;
    1. /**
    2.  * Created by macro on 2021/4/13.
    3.  */
    4. @Service
    5. @Slf4j
    6. public class JobHandlerImpl implements EruptJobHandler {
    7.     @Override
    8.     public String exec(String code, String param) throws Exception {
    9.         log.info("定时任务已经执行,code:{},param:{}",code,param);
    10.         return "success";
    11.     }
    12. }
    • 之后重新启动应用,在任务维护中添加一个定时任务,每5秒执行一次;

    • 添加成功后,定时任务开始执行,点击任务列表中的日志按钮即可查看执行日志。

    代码生成器erupt-generator

    如果你觉得手写实体类比较麻烦的话,还可以用用Erupt中的代码生成器。

    • 在pom.xml中添加erupt-generator相关依赖;
    1. <!-- 代码生成器 erupt-generator -->
    2. <dependency>
    3.     <groupId>xyz.erupt</groupId>
    4.     <artifactId>erupt-generator</artifactId>
    5.     <version>${erupt.version}</version>
    6. </dependency>
    • 在代码生成菜单中我们可以像在Navicat中一样,直接添加表和字段,从而生成实体类代码;

    • 我们在添加过程中可以发现,Erupt支持的编辑类型还挺多的,多达30种;

    • 添加成功后,点击列表项的代码预览按钮可以直接生成代码,复制到自己项目下即可。

    系统监控erupt-monitor

    通过使用Erupt的系统监控功能,我们可以查看服务器的配置、Redis的缓存使用情况和在线用户信息。

    • 在pom.xml中添加erupt-monitor相关依赖;
    1. <!--服务器监控 erupt-monitor-->
    2. <dependency>
    3.     <groupId>xyz.erupt</groupId>
    4.     <artifactId>erupt-monitor</artifactId>
    5.     <version>${erupt.version}</version>
    6. </dependency>
    • 由于需要使用到Redis,所以要在application.yml中添加Redis配置,并开启Session的Redis存储功能;
    1. spring:
    2.   redis:
    3.     host: localhost # Redis服务器地址
    4.     database: 1 # Redis数据库索引(默认为0)
    5.     port: 6379 # Redis服务器连接端口
    6.     password: 123456 # Redis服务器连接密码(默认为空)
    7.     timeout: 3000ms # 连接超时时间
    8. erupt:
    9.   # 开启redis方式存储session,默认false,开启后需在配置文件中添加redis配置
    10.   redisSession: true
    • 通过服务监控菜单,可以查看到服务器的CPU、内存和Java虚拟机信息;

    • 通过缓存监控菜单,可以查看到Redis信息、命令统计和Redis Key统计;

    • 通过在线用户菜单,可以查看到在线用户信息,还可以让用户强行退出!

    NoSQL数据源erupt-mongodb

    Erupt支持多种数据源,包括:MySQL、Oracle、PostgreSQL、H2,甚至支持 MongoDB。下面我们来体验下MongoDB的支持功能。

    • 在pom.xml中添加erupt-mongodb相关依赖;
    1. <!--NoSQL数据源 erupt-mongodb-->
    2. <dependency>
    3.     <groupId>xyz.erupt</groupId>
    4.     <artifactId>erupt-mongodb</artifactId>
    5.     <version>${erupt.version}</version>
    6. </dependency>
    • 由于需要使用到MongoDB,所以要在application.yml中添加MongoDB配置;
    1. spring:
    2.   data:
    3.     mongodb:
    4.       host: localhost # mongodb的连接地址
    5.       port: 27017 # mongodb的连接端口号
    6.       database: erupt # mongodb的连接的数据库
    • 以一个简化版的商品管理为例,还是熟悉的套路,添加一个PmsProduct实体类;
    1. /**
    2.  * Created by macro on 2021/4/13.
    3.  */
    4. @EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  //此注解表示使用MongoDB来存储数据
    5. @Document(collection = "product")
    6. @Erupt(
    7.         name = "商品管理",
    8.         orderBy = "sort"
    9. )
    10. public class PmsProduct {
    11.     @Id
    12.     @EruptField
    13.     private String id;
    14.     @EruptField(
    15.             views = @View(title = "商品名称", sortable = true),
    16.             edit = @Edit(title = "商品名称", search = @Search(vague = true))
    17.     )
    18.     private String name;
    19.     @EruptField(
    20.             views = @View(title = "副标题", sortable = true),
    21.             edit = @Edit(title = "副标题", search = @Search(vague = true))
    22.     )
    23.     private String subTitle;
    24.     @EruptField(
    25.             views = @View(title = "价格", sortable = true),
    26.             edit = @Edit(title = "价格")
    27.     )
    28.     private Double price;
    29.     @EruptField(
    30.             views = @View(title = "商品图片"),
    31.             edit = @Edit(title = "商品图片"type = EditType.ATTACHMENT,
    32.                     attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
    33.     )
    34.     private String pic;
    35.     @EruptField(
    36.             views = @View(title = "状态", sortable = true),
    37.             edit = @Edit(title = "状态",
    38.                     boolType = @BoolType(trueText = "上架", falseText = "下架"),
    39.                     search = @Search)
    40.     )
    41.     private Boolean publishStatus;
    42.     @EruptField(
    43.             views = @View(title = "创建时间", sortable = true),
    44.             edit = @Edit(title = "创建时间", search = @Search(vague = true))
    45.     )
    46.     private Date createTime;
    47. }
    • 与之前操作MySQL的区别是通过@EruptDataProcessor注解指定用MongoDB来存储数据,@Table注解改为使用@Document注解;
    1. @EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  //此注解表示使用MongoDB来存储数据
    2. @Document(collection = "product")
    3. @Erupt(
    4.         name = "商品管理",
    5.         orderBy = "sort"
    6. )
    7. public class PmsProduct {
    8.     //...省略若干代码
    9. }
    • 接下来就是在菜单维护里面添加一个商品管理的菜单,刷新一下就可以看到该功能了。

    在线接口开发erupt-magic-api

    最后再介绍一个神奇的功能,直接通过UI界面来开发接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象!

    • 在pom.xml中添加erupt-magic-api相关依赖;
    1. <!--在线接口开发 erupt-magic-api-->
    2. <dependency>
    3.     <groupId>xyz.erupt</groupId>
    4.     <artifactId>erupt-magic-api</artifactId>
    5.     <version>${erupt.version}</version>
    6. </dependency>
    • 在application.yml中添加magic-api相关配置;
    1. erupt:
    2.   # 设置具体哪些包被jackson消息转化而不是gson
    3.   jacksonHttpMessageConvertersPackages:
    4.     - org.ssssssss
    5. magic-api:
    6.   web: /magic/web
    7.   # 接口配置文件存放路径
    8.   resource.location: D:/erupt/magic-script
    • 我们可以直接通过magic-api自己定义的脚本来实现查询,比如下面这个脚本,用于查询全部品牌;
    1. var sql = "select * from pms_brand";    
    2. return db.select(sql);
    • 在接口配置菜单中直接添加该脚本即可实现品牌列表查询接口,无需额外编写代码;

    • 在浏览器中直接访问接口,发现已经自动生成接口,是不是很棒!

    总结

    如果你的需求是搭建一个业务并不复杂的后台管理系统,Erupt是一个很好的选择!它能让你不写前端代码!但是如果你的需求方对界面有很多要求,而你的业务逻辑又比较复杂的话那就要自己实现前端了!

  • 相关阅读:
    C++——priority_queue类的模拟实现
    【Java基础】线程的概念、特点及创建线程的三种方式
    Redis6 六:Redis常用五大数据类型—— 集合Set 、 哈希hash 和 有序集合Zset
    2024有哪些免费的mac苹果电脑内存清理工具?
    java-net-php-python-jsp基于JavaWeb的医药公司销售系统的设计与实现计算机毕业设计程序
    QT5.15使用VISA接口连接GPIB设备和USB设备
    Vue常见面试题 - 01
    SDN | OpenvSwitch | OVS网桥及流表管理
    计算机mfc140.dll文件缺失的修复方法分析,一键修复mfc140.dll
    让迁移不再开盲盒,让云也能省钱丨Hackathon 项目背后的故事第一期回顾
  • 原文地址:https://blog.csdn.net/m0_55849656/article/details/125262360