乐趣区

关于java:再见前端纯-Java-撸个管理系统这框架用起来贼爽

一个管理系统,往往须要后端 + 前端一起实现。单表 CRUD 操作往往都差不多,咱们能够应用代码生成器来实现。有时候咱们的管理系统只须要一些简略的 CRUD 页面,有没有什么框架能做到不写前端代码,纯 Java 撸个管理系统呢?这里举荐一个全栈类框架 Erupt,心愿对大家有所帮忙!

SpringBoot 实战电商我的项目 mall(40k+star)地址:https://github.com/macrozheng/mall

Erupt 简介

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

根本应用

咱们首先来波实战,以商品品牌治理为例,来相熟下 Erupt 联合 SpringBoot 的根本应用!

SpringBoot 整合 Erupt

因为 Erupt 原生反对 SpringBoot,所以整合还是很不便的!

  • 为了方便管理 Erupt 版本,咱们先在 pom.xml 中增加 Erupt 的版本属性;
<properties>
    <erupt.version>1.6.13</erupt.version>
</properties>
  • 之后在 pom.xml 中增加 Erupt 的权限治理、数据安全、后盾 WEB 界面及 MySQL 驱动依赖;
<dependencies>
    <!-- 用户权限治理 -->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-upms</artifactId>
        <version>${erupt.version}</version>
    </dependency>
    <!-- 接口数据安全 -->
    <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 数据库驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
</dependencies>
  • 批改我的项目的 application.yml 文件,增加数据源和 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 目录下创立如下配置文件(拷贝 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 中创立 erupt 数据库,之后应用启动类运行该我的项目,在 erupt 数据库中会主动创立如下表;

  • 我的项目启动胜利后,能够间接访登录页,默认账号密码erupt:erupt,我的项目拜访地址:http://localhost:8080/

  • 登录胜利后会跳转到我的项目主页,咱们能够发现没有写一行前端代码,却领有了残缺的权限治理和字典治理性能,是不是很棒!

实现单表 CRUD

应用外围注解 @Erupt@EruptField定义一个实体类即可疾速实现 CRUD 操作,让咱们以商品品牌治理为例试试吧。

  • 不须要 Controller、Service、Dao,仅仅一个实体类即可实现 CRUD,首先咱们创立实体类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 = "品牌专区大图"),
            edit = @Edit(title = "品牌专区大图", 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;

}
  • 创立胜利后重启我的项目,在 菜单保护 中增加一个叫 商品 的一级菜单;

  • 而后再增加一个叫 品牌治理 的二级菜单,留神抉择好 菜单类型 上级菜单 ,输出 类型值 为实体类的类名称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 相干依赖;
<!-- 定时工作 erupt-job-->
<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-job</artifactId>
    <version>${erupt.version}</version>
</dependency>
  • 之后在 application.yml 中增加邮件配置(否则启动会报错);
spring:
  mail:
    username: xxxxxx@qq.com
    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
  • 之后创立一个定时工作实现类 JobHandlerImpl,在exec 办法中增加定时工作执行代码;
/**
 * 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("定时工作曾经执行,code:{},param:{}",code,param);
        return "success";
    }
}
  • 之后重新启动利用,在 工作保护 中增加一个定时工作,每 5 秒执行一次;

  • 增加胜利后,定时工作开始执行,点击工作列表中的 日志 按钮即可查看执行日志。

代码生成器erupt-generator

如果你感觉手写实体类比拟麻烦的话,还能够用用 Erupt 中的代码生成器。

  • pom.xml 中增加 erupt-generator 相干依赖;
<!-- 代码生成器 erupt-generator -->
<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-generator</artifactId>
    <version>${erupt.version}</version>
</dependency>
  • 代码生成 菜单中咱们能够像在 Navicat 中一样,间接增加表和字段,从而生成实体类代码;

  • 咱们在增加过程中能够发现,Erupt 反对的 编辑类型 还挺多的,多达 30 种;

  • 增加胜利后,点击列表项的 代码预览 按钮能够间接生成代码,复制到本人我的项目下即可。

系统监控erupt-monitor

通过应用 Erupt 的系统监控性能,咱们能够查看服务器的配置、Redis 的缓存应用状况和在线用户信息。

  • pom.xml 中增加 erupt-monitor 相干依赖;
<!-- 服务器监控 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 数据库索引(默认为 0)port: 6379 # Redis 服务器连贯端口
    password: 123456 # Redis 服务器连贯明码(默认为空)timeout: 3000ms # 连贯超时工夫
erupt:
  # 开启 redis 形式存储 session,默认 false,开启后需在配置文件中增加 redis 配置
  redisSession: true
  • 通过 服务监控 菜单,能够查看到服务器的 CPU、内存和 Java 虚拟机信息;

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

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

NoSQL 数据源erupt-mongodb

Erupt 反对多种数据源,包含:MySQL、Oracle、PostgreSQL、H2,甚至反对 MongoDB。上面咱们来体验下 MongoDB 的反对性能。

  • pom.xml 中增加 erupt-mongodb 相干依赖;
<!--NoSQL 数据源 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 的连贯的数据库
  • 以一个简化版的商品治理为例,还是相熟的套路,增加一个 PmsProduct 实体类;
/**
 * Created by macro on 2021/4/13.
 */
@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  // 此注解示意应用 MongoDB 来存储数据
@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 = "状态", sortable = true),
            edit = @Edit(title = "状态",
                    boolType = @BoolType(trueText = "上架", falseText = "下架"),
                    search = @Search)
    )
    private Boolean publishStatus;

    @EruptField(views = @View(title = "创立工夫", sortable = true),
            edit = @Edit(title = "创立工夫", search = @Search(vague = true))
    )
    private Date createTime;
}
  • 与之前操作 MySQL 的区别是通过 @EruptDataProcessor 注解指定用 MongoDB 来存储数据,@Table注解改为应用 @Document 注解;
@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)  // 此注解示意应用 MongoDB 来存储数据
@Document(collection = "product")
@Erupt(
        name = "商品治理",
        orderBy = "sort"
)
public class PmsProduct {//... 省略若干代码}
  • 接下来就是在 菜单保护 外面增加一个 商品治理 的菜单,刷新一下就能够看到该性能了。

在线接口开发erupt-magic-api

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

  • pom.xml 中增加 erupt-magic-api 相干依赖;
<!-- 在线接口开发 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 本人定义的脚本来实现查问,比方上面这个脚本,用于查问全副品牌;
var sql = "select * from pms_brand";    
return db.select(sql);
  • 接口配置 菜单中间接增加该脚本即可实现品牌列表查问接口,无需额定编写代码;

  • 在浏览器中间接拜访接口,发现曾经主动生成接口,是不是很棒!

总结

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

参考资料

官网文档:https://www.yuque.com/erupts/…

我的项目源码地址

https://github.com/macrozheng…

本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家 Star!

退出移动版