SpringBoot+VUE实现数据表格的实战


Posted in Java/Android onAugust 02, 2021

前言

还记得第一次做项目时,因为不会将数据库表中的数据渲染到前端而头疼,最后还是靠layui提供的数据表格API实现了前端数据表格的渲染。一直到现在做了很多SpringBoot项目、SSM项目之后,现在返回头来看这个曾经这个让我备受折磨的问题,脑海中下意识就会想到很多种解决的方法,比如导入前端的数据表格、通过JavaScript渲染数据表格、通过VUE来渲染数据表格…本文将使用VUE+SpringBoot+MybatisPlus,以前后端分离的形式来实现数据表格在前端的渲染,在此做下记录,便于以后进行回顾。

使用的开发工具:

  • 前端:HBuilderX
  • 后端:IntelliJ IDEA

本次要进行渲染的数据库内容如下:

SpringBoot+VUE实现数据表格的实战

提示:以下是本篇文章正文内容,下面案例可供参考

一、前端准备

1. 基础界面

在前端先将页面写好,在这里我按照数据库表格中的字段顺序依次填写

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>showDataList</title>
	</head>
	<body>
		<div id="app" align="center">
			<table border="1" width="48%" style="text-align: center;">
				<tr>
					<td colspan="5">
						<h1>用户列表</h1>
					</td>
				</tr>
				<tr>
					<td>编号</td>
					<td>姓名</td>
					<td>性别</td>
					<td>年龄</td>
				</tr>
			</table>
		</div>
	</body>
</html>

显示效果:

SpringBoot+VUE实现数据表格的实战

2. 导入JS文件

在这里我导入了VUE和Axios的JS文件,在HTML的<head>标签中引入相应的JS文件 (axios起的作用和Ajax是相同的,使用axios是因为在做项目的过程中axios相较于Ajax来说很好的解决了回调地狱的问题)

<script src="static/js/vue.js"></script>
<script src="static/js/axios.js"></script>

导入了JS文件后,准备<script>标签用来准备VUE对象和axios进行数据传输
<script>标签中的代码如下:

<script>
		// 设定axios的请求前缀
		axios.defaults.baseURL = "http://localhost:8090"

		// 指定VUE的渲染区域
		const app = new Vue({
			el: "#app",
			data: {

			},
			methods: {

			}
		})
	</script>

代码解释:

axios.defaults.baseURL = "http://localhost:8090"

在前后端分离的项目中,前端每一次向后端传输数据时都要指定HTTP协议以及端口号,这行代码定义了请求前缀之后axios传输数据时都默认加上了双引号中的内容

const app = new Vue({...})

这段代码中指定了VUE要渲染的区域,el对应内容是id为app的div图层,data为指定数据的区域methods为定义方法的区域

二、后端准备

新建SpringBoot项目并配置MybatisPlus,配置MybatisPlus的过程就不在此赘述

1. 创建实体类

在后端pojo包下新建User实体类,实体类中的属性要与数据库中的字段对应一致

@Data
@Accessors(chain = true)
@TableName("demo_user")
public class User implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    // 如果属性与字段同名(包括驼峰规则)注解可以省略
    private String name; 
    private Integer age;
    private String sex;
}

代码解释:

  • @Data为lombok插件提供的注解,自动为属性提供了get/set/toString等方法
  • @Accessors(chain = true)也是lombok插件提供的注解,开启链式编程
  • @TableName("demo_user")为MybatisPlus提供的注解,用于指定该实体类对应数据中的哪张表
  • @TableId(type = IdType.AUTO)用来指定实体类中的哪个属性作为表中的主键,并且主键自增实现了
  • Serializable接口的作用是将该实体类序列化,将实体类序列化的目的是为了保证数据在传输的过程中不会出错

2. Controller层

在创建好实体类后,开始写Controller层的代码

@RestController
@CrossOrigin
@RequestMapping("/table")
public class TableController {
    @Autowired
    private UserService userService;
	
	@GetMapping("/getAllUser")
    public List<User> getAllUser() {
        List<User> userList = userService.selectAll();
        return userList;
    }
}

代码解释:

  • 在Controller层中添加@CrossOrigin注解的作用是支持跨域
  • @RestController相当于@Controller@ResponseBody两个注解的结合,将后端的数据以JSON串的格式返回到前端

3. Service层

①. UserService接口

public interface UserService {
    /**
     * 查询数据库对应表中所有的数据
     *
     * @return 集合对象
     */
    List<User> selectAll();
}

②. UserServiceImpl实现类

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    /**
     * 查询数据库中所有的集合
     *
     * @return 集合对象
     */
    @Override
    public List<User> selectAll() {
        List<User> userList = userMapper.selectList(null);
        return userList;
    }
}

在MybatisPlus中,selectList方法的参数为空时会查询当前表中的所有数据

4. Mapper层

①. UserMapper接口

public interface UserMapper extends BaseMapper<User> {

}

②. UserMapper.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.shijimo.mapper.UserMapper">
    
</mapper>

在MybatisPlus中SQL语句可以自动生成

三、前后端整合

完成前端和后端的基本配置之后,接下来进行前后端分离项目的整合,在进行整合时先对实现过程进行分析
1. 当用户点击显示表格按钮时就应该发起Ajax请求获取userList数据
2. 将UserList中的数据在页面中展现(页面中的数据必须在data中定义
3. 将请求的结果赋值给data属性
4. 利用v-for指令实现数据的遍历

<script>代码块中VUE的代码进行编辑:
因为后端的返回值是一个集合,所以首先在data数据域中定义userList数组对象用来接收从后端传来的集合,接着在methods方法区域中定义一个方法getUserList,该方法中要进行axios向后端发起请求,并将返回的数据存储到数组对象中。在HTML的<table>标签中添加一个按钮组件,为按钮绑定getUserList方法。

添加完按钮组件之后,在<table>标签中也添加<tr>标签,使用VUE中的v-for指令来对userList集合进行遍历,依次取出并进行渲染。

<script>
	// 设定axios的请求前缀
	axios.defaults.baseURL = "http://localhost:8090"

	// 指定VUE的渲染区域
	const app = new Vue({
		el: "#app",
		data: {
			// 定义集合来存储数据, 此时数据为null
			userList: []
		},
		methods: {
			// 1. 定义getUserList方法 获取后台服务器数据
			async getUserList() {
				// 新增操作请求的类型: post	接收时需要使用JSON方式处理
				let {
					data: result
				} = await axios.get("/table/getAllUser")
				// Ajax调用之后, 将请求结果赋值给data属性
				this.userList = result
			}
		}
	})
</script>
<table border="1" width="48%" style="text-align: center;">
	<tr>
		<td colspan="5">
			<h1>用户列表</h1>
		</td>
	</tr>
	<tr>
		<td colspan="5" style="text-align: left;">
			<button type="button" @click="getUserList">显示表格</button>
		</td>
	</tr>
	<tr>
		<td>编号</td>
		<td>姓名</td>
		<td>性别</td>
		<td>年龄</td>
	</tr>
	<tr v-for="user in userList">
		<td v-text="user.id"></td>
		<td v-text="user.name"></td>
		<td v-text="user.sex"></td>
		<td v-text="user.age"></td>
	</tr>
</table>

代码解释:
在这里使用v-text指令不使用插值表达式(即{{}})的原因是因为如果传输的数据很多的话,在没有显示完之前页面上会显示{{XXX}},不利于浏览器的安全。
至此前后端整合完毕。

四、运行结果

SpringBoot+VUE实现数据表格的实战

SpringBoot+VUE实现数据表格的实战

SpringBoot+VUE实现数据表格的实战

表中的内容就全部显示在了前端,最后再用bootstrap进行修饰美化

SpringBoot+VUE实现数据表格的实战

总结

以上就是使用SpringBoot + VUE + Mybatis实现了数据表格的渲染,更多相关SpringBoot+VUE数据表格内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
Java方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
java Nio使用NioSocket客户端与服务端交互实现方式
Jun 15 Java/Android
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
Jun 21 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
Jpa Specification如何实现and和or同时使用查询
Nov 23 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
使用HttpSessionListener监听器实战
Mar 17 Java/Android
SpringBoot2零基础到精通之数据与页面响应
Mar 22 Java/Android
springcloud整合seata
May 20 Java/Android
Android RecyclerView实现九宫格效果
Jun 28 Java/Android
IDEA中sout快捷键无效问题的解决方法
Jul 23 Java/Android
springboot 启动如何排除某些bean的注入
Aug 02 #Java/Android
idea 在springboot中使用lombok插件的方法
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
Jul 26 #Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 #Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 #Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 #Java/Android
dubbo服务整合zipkin详解
You might like
基于PHP生成静态页的实现方法
2013/05/10 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
Symfony核心类概述
2016/03/17 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
Python translator使用实例
2008/09/06 Python
Python抓取百度查询结果的方法
2015/07/08 Python
详解django.contirb.auth-认证
2018/07/16 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
亲子读书活动方案
2014/02/22 职场文书
作文评语集锦大全
2014/04/23 职场文书
要账委托书范本
2014/09/15 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
离职感谢信怎么写
2015/01/22 职场文书
离婚起诉书范本
2015/05/18 职场文书
运动员加油词
2015/07/18 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
组织委员竞选稿
2015/11/21 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
何时使用Map来代替普通的JS对象
2021/04/29 Javascript