基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(四)——前后端数据交互

 经过前面几个章节的学习我们掌握了:

        1、如何使用Vue快速搭建前端工程化项目,并结合elementUI优化了界面;

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(一)

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(二)

        2、还学会了使用注解、xml配置两种方式对后端进行数据库CRUD操作;

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(三)

在第四章节我们学习前后端跨域连接,这样就架起了前后端交互的桥梁。

目录

学习目标

        通过本节实操我们可以获得以下几方面能力 :

1、掌握分页查询SQL原理以及SQL统计语句(统计总记录数);        

2、了解前后端跨域的概念;      

 3、后端添加跨域配置,实现前后端跨域;        

4、掌握前端pageNum和pageSize以及分页方法。

5、掌握条件搜索分页查询

一、后端分层添加分页查询方法 

1、mapper层

2、service层

3、controller层

二、postman测试

三、跨域配置和前端取值

 1、后端配置跨域

2、前端修改

2.1、分页功能里下面几处和图中进行相同的修改

2.2、完整代码如下,对比进行修改

 3、前端运行项目

四、条件搜索并分页展示数据 

1、mapper层

 2、service层

​编辑 4、前端修改

5、运行项目


 

学习目标

        通过本节实操我们可以获得以下几方面能力 :

        1、掌握分页查询SQL原理以及SQL统计语句(统计总记录数);
        2、了解前后端跨域的概念;
        3、后端添加跨域配置,实现前后端跨域;
        4、掌握前端pageNum和pageSize以及分页方法。

        5、掌握条件搜索分页查询

一、后端分层添加分页查询方法 

1、mapper层

在UserMapper类我们用注解方式添加分页查询接口及SQL,代码如下:

 @Select("select * from sys_user limit #{pageNum},#{pageSize}")List<User> selectPage(@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize);

2、service层

 在UserService类,添加selectPage方法,代码如下:

public List selectPage(Integer pageNum, Integer pageSize) {
return userMapper.selectPage(pageNum,pageSize);
}

3、controller层

在UserController类中添加findPage方法,代码如下:

//分页查询
@GetMapping("/page")
public List<User> findPage(@RequestParam Integer pageNum,@RequestParam Integer pageSize){pageNum=(pageNum-1)*pageSize;return userService.selectPage(pageNum,pageSize);}

二、postman测试

 1、发起get请求,路由中传入参数,看到如下界面证明我们的后端分页取数据是没有问题的,接下来就可以进行跨域配置和前端代码修改,使得前端能够拿到后端数据并在浏览器上显示给用户。

三、跨域配置和前端取值

跨域配置可以在前端或者后端进行,这节课我们来学习在后端进行跨域配置

 1、后端配置跨域

        在config包下新建CorsConfig类,添加如下代码

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;//跨域配置
@Configuration
public class CorsConfig {// 当前跨域请求最大有效时长。这里默认1天private static final long MAX_AGE = 24 * 60 * 60;@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法corsConfiguration.setMaxAge(MAX_AGE);source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置return new CorsFilter(source);}
}

2、前端修改

2.1、分页功能里下面几处和图中进行相同的修改

2.2、<script></script>完整代码如下,对比进行修改

<script>
//逗号千万记得加加加加加加加
// @ is an alias to /src(@是/src的别名)
import HelloWorld from '@/components/HelloWorld.vue'export default {name: 'HomeView',data(){//这里的变量和上面分页设置中自定义变量名一致return {// 之前这里是虚拟数据,用数据函数批量生成表格中数据tableData: [],pageNum: 1 ,// 这里设置分页框中的默认值pageSize: 5,total: 0}},//创建完页面后执行的钩子函数created(){this.load()},//下面是各种函数,包括自定义函数methods: {   load(){fetch("http://localhost:8085/user/page?pageNum="+this.pageNum+"&pageSize="+this.pageSize+"").then(res=>res.json()).then(res=>{	  console.log(res)   this.tableData=res.data  //后台返回的所有数据this.total=res.total    //后台返回的总条数})},// 添加分页功能函数handleSizeChange(valS) {//传递过来当前每页要显示几条console.log(`每页 ${valS} 条`);this.pageSize=valS   //获取当前每页条数this.load()},handleCurrentChange(valN) {//传递过来当前是第几页console.log(`当前页: ${valN}`);this.pageNum=valN     //获取当前第几页this.load()}}   }
</script>

 3、前端运行项目

看到如下分页效果,证明我们的前后端数据交互成功了。

四、条件搜索并分页展示数据 

前面我们学习了从后端拿到数据并分页展示在浏览器(客户端),在此基础上我们就可以进一步完成上面的条件搜索并分页展示的功能,先来学习按照用户名模糊查询并分页展示。

1、mapper层

修改UserMapper中分页查询和查询总条数方法:

sql语句在之前的基础上增加了查询条件:where username like #{userName}

方法体里形参增加了String UserName参数

具体代码如下

//按条件分页查询接口,注解方式sql@Select("select * from sys_user where username like #{userName} limit #{pageNum},#{pageSize}")List<User> selectPage(@Param("pageNum") Integer pageNum,@Param("pageSize") Integer pageSize,@Param("userName") String userName);//查询数据总条数接口及sql@Select("select count(*) from sys_user where username like #{userName}")Integer selectTotal(String userName);

 2、service层

方法体里形参增加了String UserName参数

3、controller层

 4、前端修改

前端主要修改四个地方

5、运行项目

我这里模糊查询名字里有“火”的数据,一共得到三条数据。其他两个查询框想要生效同理,如法炮制也能得到结果,我们后面会依次补全这里的功能。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522141.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有没有能用蓝牙的游泳耳机?6招解决选购难题,瞄准好货!

在数字化时代&#xff0c;我们越来越依赖各种电子设备来提升生活质量。对于喜欢运动的朋友来说&#xff0c;耳机已经成为他们必不可少的装备之一。无论是跑步、健身还是游泳&#xff0c;耳机都能为我们提供美妙的音乐和清晰的语音通话&#xff0c;让我们的运动体验更加丰富多彩…

使用ffmpeg提取视频中的音频并保存为单声道wav

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 $ ffmpeg -i C0439.MP4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable…

根据xlsx文件第一列的网址爬虫

seleniumXpath 在与该ipynb文件同文件下新增一个111.xlsx&#xff0c;第一列放一堆需要爬虫的同样式网页 然后使用seleniumXpath爬虫 from selenium import webdriver from selenium.webdriver.common.by import By import openpyxl import timedef crawl_data(driver, url)…

骨传导蓝牙立体声耳机哪个好?骨传导耳机选购前不可忽视的几个要点

骨传导蓝牙立体声耳机是一种创新的蓝牙耳机设备&#xff0c;它通过将声音转换为特定频率的振动&#xff0c;直接通过颅骨传递到内耳&#xff0c;绕过了外耳道。这种耳机设计为一般为挂耳式&#xff0c;它无需插入耳道&#xff0c;所以不会对耳膜造成损伤&#xff0c;同时也避免…

通过sqoop把hive数据到mysql,脚本提示成功,mysql对应的表中没有数

1、脚本执行日志显示脚本执行成功&#xff0c;读写数量不为0 2、手动往Mysql对应表中写入数据十几秒后被自动删除了 问题原因&#xff1a; 建表时引擎用错了&#xff0c;如下图所示 正常情况下应该用InnoDB

借助工具优化开发流程,提升开发体验

背景 最近在做一个demo&#xff0c;只有一个html页面&#xff0c;需要开启一个https web server&#xff0c;以此来实现在浏览器中访问。 改造前 改造前&#xff0c;每次修改文件保存后都要刷新一下浏览器。 如果只是短时间&#xff0c;每次修改后手动刷新浏览器也还行。主要…

smplx pkl格式可视化

smplx pkl格式可视化 import glob import os import pickleimport torch import numpy as npfrom smplpytorch.pytorch.smpl_layer import SMPL_Layer from display_utils import display_model, display_model_continuousfrom matplotlib import pyplot as plt from matplotl…

构建cef基本框架及构建过程中的参数说明

文章目录 准备源码版本编译版本结构编译过程写了好多CEF的内容了,发现一个最初的CEF helloworld的过程都没有写,也就是如何搭建这个CEF框架。今天把这个过程记录一下。 准备源码版本 在度娘上搜cef源码,一般得到的是https://bitbucket.org/chromiumembedded/cef/这个网址,…

RocketMQ快速入门_2. rocketmq 的应用场景、与其他mq的差异

0. 引言 之前我们讲解过rabbitMQ&#xff0c;本期我们将进入吞吐量更加强大的rocketMQ的学习。 1. 基础概念 如果你是刚接触MQ的同学&#xff0c;还不清楚消息队列的基础概念的&#xff0c;可以参考我之前这篇文章&#xff1a; https://wu55555.blog.csdn.net/article/deta…

产品经理必看,教你写一份简单的产品说明书

作为一名产品经理&#xff0c;你可能会为如何写一份能够有效传达产品特性和使用步骤的说明书而困扰。确实&#xff0c;写作产品说明书的过程中&#xff0c;需要详细并准确展示产品的所有功能&#xff0c;同时保持文本清晰、简洁和易于理解。以下是一些步骤和技巧&#xff0c;可…

家用洗地机哪个型号好用?介绍几个值得考虑的品牌

作为家里的主要清洁工&#xff0c;我一直以来都是负责家里的清洁工作。我经常使用吸尘器和扫地机器人来轮流清洁&#xff0c;虽然效果还不错&#xff0c;但是这种方式太费时间和精力了。特别是在脸上厨房里做完饭和孩子吃完饭后留下的残渣时&#xff0c;我总是需要用传统的拖多…

力扣大厂热门面试算法题 9-11

9. 回文数&#xff0c;10. 正则表达式匹配&#xff0c;11. 盛最多水的容器&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.08 可通过leetcode所有测试用例。 目录 9. 回文数 解题思路 完整代码 Java Python 10. 正则表达式…