SpringBoot+VUE实现数据表格

简介: SpringBoot+VUE实现数据表格

前言


既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。

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

使用的开发工具:

  1. 前端:HBuilderX
  2. 后端:IntelliJ IDEA

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

image.png

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

一、前端准备


1. 基础界面


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

HTML界面代码:

<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>showDataList</title></head><body><divid="app"align="center"><tableborder="1"width="48%"style="text-align: center;"><tr><tdcolspan="5"><h1>用户列表</h1></td></tr><tr><td>编号</td><td>姓名</td><td>性别</td><td>年龄</td></tr></table></div></body></html>

显示效果:

image.png

2. 导入JS文件


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

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

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

<script>标签中的代码如下:

<script>// 设定axios的请求前缀axios.defaults.baseURL="http://localhost:8090"// 指定VUE的渲染区域constapp=newVue({
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;
}

代码解释:

  1. @Data为lombok插件提供的注解,自动为属性提供了get/set/toString等方法
  2. @Accessors(chain = true)也是lombok插件提供的注解,开启链式编程
  3. @TableName("demo_user")为MybatisPlus提供的注解,用于指定该实体类对应数据中的哪张表
  4. @TableId(type = IdType.AUTO)用来指定实体类中的哪个属性作为表中的主键,并且主键自增
  5. 实现了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;
    }
}

代码解释:

  1. 在Controller层中添加@CrossOrigin注解的作用是支持跨域
  2. @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>代码:

<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>

HTML代码:

<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}},不利于浏览器的安全。

至此前后端整合完毕。

四、运行结果


image.png

image.png

image.png

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

image.png

总结


以上就是使用SpringBoot + VUE + Mybatis实现了数据表格的渲染,对于数据表格的渲染方法有很多,现在再回过头来看曾经困扰自己很久的问题,看着一个又一个被自己解决的难题,信心也在解决困难的过程中不断的强大!希望自己能够为了理想坚持下去,相信梦想一定会有实现的那一天!

image.png


相关文章
|
2月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
341 4
基于springboot+vue开发的会议预约管理系统
|
6月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
629 1
|
7月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
504 7
|
3月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
230 6
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
4月前
|
JSON Java 数据格式
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
523 3
|
5月前
|
监控 数据可视化 JavaScript
springboot + vue的MES系统生产计划管理源码
MES系统(制造执行系统)的生产计划管理功能是其核心模块之一,涵盖生产计划制定与优化、调度排程、进度监控反馈、资源管理调配及可视化报告五大方面。系统基于SpringBoot + Vue-Element-Plus-Admin技术栈开发,支持多端应用(App、小程序、H5、后台)。通过实时数据采集与分析,MES助力企业优化生产流程,适用于现代化智能制造场景。
289 1
|
6月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
608 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
7月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
575 6
|
8月前
|
SQL JavaScript 前端开发
Vue实现动态数据透视表(交叉表)
Vue实现动态数据透视表(交叉表)
428 13
|
7月前
|
JavaScript 前端开发 Java
Spring Boot 与 Vue.js 前后端分离中的数据交互机制
本文深入探讨了Spring Boot与Vue.js在前后端分离架构下的数据交互机制。通过对比传统`model.addAttribute()`方法与RESTful API的设计,分析了两者在耦合性、灵活性及可扩展性方面的差异。Spring Boot以RESTful API提供数据服务,Vue.js借助Axios消费API并动态渲染页面,实现了职责分明的解耦架构。该模式显著提升了系统的灵活性和维护性,适用于复杂应用场景如论坛、商城系统等,为现代Web开发提供了重要参考。
756 0