手把手教你不用写前端,手撸一个纯JAVA后台系统
一个管理系统,往往需要后端+前端一起实现。单表CRUD操作往往都差不多,我们可以使用代码生成器来实现。有时候我们的管理系统只需要一些简单的CRUD页面,有没有什么框架能做到不写前端代码,纯Java撸个管理系统呢?这里推荐一个全栈类框架Erupt,希望对大家有所帮助!
目录
#Erupt简介
#基本使用
#SpringBoot整合Erupt
实现单表 CRUD
核心注解说明
#扩展模块
#定时任务erupt-job
#代码生成器erupt-generator
系统监控erupt-monitor
#NoSQL数据源erupt-mongodb
在线接口开发erupt-magic-api
#总结
#参考资料
#项目源码地址
#Erupt简介
Erupt是一个低代码全栈类
框架,它使用Java 注解
动态生成页面以及增、删、改、查、权限控制等后台功能。零前端代码、零CURD、自动建表,仅需一个类文件
+ 简洁的注解配置,快速开发企业级后台管理系统。
#基本使用
我们首先来波实战,以商品品牌管理为例,来熟悉下Erupt结合SpringBoot的基本使用!
#SpringBoot整合Erupt
由于Erupt原生支持SpringBoot,所以整合还是很方便的!
- 为了方便管理Erupt版本,我们先在
pom.xml
中添加Erupt的版本属性;
<properties><erupt.version>1.6.13</erupt.version>
</properties>
- 修改项目的
application.yml
文件,添加数据源和JPA配置;
spring:datasource:url: jdbc:mysql://localhost:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: rootjpa:show-sql: truegenerate-ddl: truedatabase-platform: org.hibernate.dialect.MySQL5InnoDBDialectdatabase: 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")@EruptFieldprivate 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 open in new window的感觉!
- 首先我们需要在
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.compassword: 123456host: smtp.exmail.qq.comport: 465properties:mail.smtp.ssl.auth: truemail.smtp.ssl.enable: truemail.smtp.ssl.required: true
/*** Created by macro on 2021/4/13.*/
@Service
@Slf4j
public class JobHandlerImpl implements EruptJobHandler {@Overridepublic 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@EruptFieldprivate 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消息转化而不是gsonjacksonHttpMessageConvertersPackages:- 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/erupt
#项目源码地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-erupt
手把手教你不用写前端,手撸一个纯JAVA后台系统相关推荐
- 手把手教你部署Docker(手撸官网)
Docker安装(centos) 1.改阿里云yum源(配置方法参考:centos镜像_centos下载地址_centos安装教程-阿里巴巴开源镜像站) 备份原有yum源 mv /etc/yum.re ...
- 【附源代码】手把手教你用Python+uiautomator2手撸一款自动抢菜应用
包菜 -- 包你有菜 包菜是我开发的一款自动抢菜软件,解决yiqing期间大家吃菜难的问题. 需要完整源代码的朋友可以私信我 背景 事情的起因是这样的:yiqing导致物资紧张.配送困难,抢菜成为风控 ...
- 实战六:手把手教你用TensorFlow进行手写数字识别
手把手教你用TensorFlow进行手写数字识别 github下载地址 目录 手写体数字MNIST数据集介绍 MNIST Softmax网络介绍 实战MNIST Softmax网络 MNIST CNN ...
- 10分钟手把手教你用Android手撸一个简易的个人记账App
用Android手撸一个简易的个人记账系统 ⛱️序言
- 在用安全框架前,我想先让你手撸一个登陆认证
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:RudeCrab, 链接:blog.csdn.net ...
- 呆呆带你手撸一个思维导图-基础篇
希沃ENOW大前端 公司官网:CVTE(广州视源股份) 团队:CVTE旗下未来教育希沃软件平台中心enow团队 「本文作者:」 前言 你盼世界,我盼望你无bug.Hello 大家好,我是霖呆呆! 哈哈 ...
- Goroutine 并发调度模型深度解析之手撸一个高性能 goroutine 池
文章目录 1 前言 2 Goroutine & Scheduler 2.1 线程那些事儿 2.1.1 用户级线程模型 2.1.2 内核级线程模型 2.1.3 两级线程模型 2.2 G-P-M ...
- 超详细AI二维码制作教程:手把手教你如何用Stable Diffusion 生成一个创意二维码?
AI已来,未来已来! 来势汹汹的人工智能,如同创世纪的洪水,正在全世界的范围内引发一场史无前例的科技革命.AI正在改变世界!而我们正是这场巨变的见证者. 今天我们要介绍的内容就是:如何利用AI工具St ...
- 五分钟,手撸一个Spring容器!
Spring是我们最常用的开源框架,经过多年发展,Spring已经发展成枝繁叶茂的大树,让我们难以窥其全貌. 这节,我们回归Spring的本质,五分钟手撸一个Spring容器,揭开Spring神秘的面 ...
最新文章
- 获取jar中的资源文件途径
- 利用Cache,asp.net 简单实现定时执行任务
- jsonp解决跨域问题
- jquery焦点事件
- java 使用Spring的JdbcTemplate以及DriverManagerDataSource实现JDBC操作
- 多重循环控制(难点重点)
- Kali源库配置和拼音安装
- 在Ubuntu中安装MySQL (转载)
- 学习做生意的知识重要吗?
- python pandas读取csv_pandas读取csv文件数据的方法及注意点
- 国外免费服务器 win系统,FreeSSHd一个免费的SSH服务器的Windows | MOS86
- 【window操作系统下Github版本的回滚问题】
- python竖线_python画横线竖线作为分界线
- Python实现一维表与二维表之间的相互转化
- 犹太人成功和浪漫的秘诀(.html)
- Python3智联招聘网爬虫学习
- SpaceShooter打飞机教程笔记(一)
- Sublime Text 3 简体中文汉化包使用方法
- 飞屋环游记中英文对白
- windows下ipython notebook搭建、安装常见问题及Python模块安装
热门文章
- sleep include linux,linux下 sleep() 与 usleep()
- 都28岁了,为什么还不找男朋友
- Python——实现Windows桌面壁纸和bing背景的同步
- Python爬取王者荣耀全英雄台词语音及对应的文本
- 16.linux应用实现控制led
- oracle统计数据库增长量,统计数据库每天的数据增长量
- 批量采集html软件,在线批量获取网页链接工具 浏览器插件版-♚付涛纪实阁♚
- 政府大数据中心数据资源平台建设方案2022(word)
- 关于5G,一篇讲得很透彻的文章
- OpenCV非锐化掩蔽和高提升滤波