一个管理系统,往往须要后端+前端一起实现。单表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")@Entitypublic 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@Slf4jpublic 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.ssssssssmagic-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!