乐趣区

关于java:一个魔幻的框架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: xxxx@qq.com
    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 的气质相匹配,别犹豫,用它!

整顿了几百本各类技术电子书,有须要的同学公号 [ 程序员内点事 ] 内回复 [666 ] 自取。技术群快满了,想进的同学能够加我好友,和大佬们一起吹吹技术。

退出移动版