大家好,我是小富~
最近接触到个新我的项目,发现它用了一个比拟有意思的框架,能够说实现了我刚入行时候的幻想,所以这里快马加鞭的和大家分享下。
在我刚开始工作接触的我的项目都还没做前后端拆散,常常须要后端来保护页面,有时候感觉本人如同天生不适宜干前端,你要是让我钻研钻研后端的技术,看个中间件源码啊,剖析剖析什么框架底层原理啊,这都问题不大,偶然搞一下 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
,实现自定义的逻辑,对哪个按钮代理就实现对应办法即可,如beforeAdd
、afterAdd
是对新增按钮的代理。
@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 ] 自取。技术群快满了,想进的同学能够加我好友,和大佬们一起吹吹技术。