SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现【四】

文章目录

  • SSM--功能实现
    • 实现功能06-修改家居信息
      • 需求分析/图解
      • 思路分析
      • 代码实现
      • 注意事项和细节
    • 实现功能07-删除家居信息
      • 需求分析/图解
      • 思路分析
      • 代码实现
    • 实现功能08-分页显示列表
      • 需求分析/图解
      • 思路分析
      • 代码实现
      • 完成测试
        • 分页显示效果

SSM–功能实现

实现功能06-修改家居信息

需求分析/图解

image-20230801151715560

思路分析

  1. 完成后台代码从dao -> serivce -> controller , 并对每层代码进行测试
  2. 完成前台代码, 回显家居信息,再使用axios 发送http / ajax 请求,更新数据, 将数据绑定显示

代码实现

  1. 修改FurnService.java 和FurnServiceImpl.java, 增加update 方法

修改FurnService.java

public void update(Furn furn);

修改FurnServiceImpl.java,

@Override
public void update(Furn furn) {
//因为传入的furn 的字段不一定是完整的,所以使用updateByPrimaryKeySelectivefurnMapper.updateByPrimaryKeySelective(furn);
}
  1. 修改FurnServiceTest.java ,测试update
 @Testpublic void update() {Furn furn = new Furn();furn.setId(1);furn.setName("北欧风格小桌子~~");furn.setMaker("小猪家居");//因为imgPath属性有一个默认值,//所以如果我们不希望生成update 语句有对imgPath 字段修改,就显式的设置nullfurn.setImgPath(null);furnService.update(furn);System.out.println("修改OK");}
  1. 修改FurnController.java , 处理修改请求, 并使用Postman 完成测试
   @PutMapping("/update")@ResponseBodypublic Msg update(@RequestBody Furn furn) {furnService.update(furn);return Msg.success();}
  1. 修改HomeView.vue , 编写handleEdit 方法, 回显数据并测试
handleEdit(row) {//说明//1. JSON.stringify(row) 将row 转成json 字符串//2. JSON.parse(xx) 将字符串转成json 对象//3. 为什么这样做? 其实JSON.parse(JSON.stringify(row)) 就是对row 进行了深拷贝//4. 这样表格中的行数据和弹出框的数据就是独立的了this.form = JSON.parse(JSON.stringify(row))this.dialogVisible = true}//触发handleEdit 方法<el-button size="mini" @click="handleEdit(scope.row)" type="primary">编辑</el-button>

可以测试一下, 点击编辑, 回显数据

image-20230801152221432

image-20230801152236415

  1. 修改HomeView.vue , 修改save 方法, 处理修改请求, 说明更新成功的消息框, 不需要做额外处理, 直接使用this.$message 即可.
save() {//增加处理修改逻辑if (this.form.id) {request.put("/api/update", this.form).then(res => {if (res.code === 200) {//如果code 为200this.$message({ //弹出更新成功的消息框type: "success",message: "更新成功"})} else {this.$message({//弹出更新失败信息type: "error",message: res.msg})}this.list() //刷新列表this.dialogVisible = false})} else {//添加//=======说明======//1. 将form 表单提交给/api/save 的接口//2. /api/save 等价http://localhost:10001/save//3. 如果成功,就进入then 方法//4. res 就是返回的信息//5. 查看Mysql 看看数据是否保存request.post("/api/save", this.form).then(res => {this.dialogVisible = falsethis.list()})}
}
  1. 完成测试, 浏览器http://localhost:10000/

注意事项和细节

1.使用<template #default=“scope”>可以在外部获取组件内的数据,值为scope,那么由scope.row就可以得到数据了,根据得到的数据执行业务处理。。

2.调用list() 刷新数据需要注意的地方说明

​ list在添加数据时,显示页面不会马上更新需要手动刷新,数据库的数据在完成操作时会联动更新。因为异步处理,put发出请求本质是一个回调,当request发出put请求后,箭头函数对应的是一个回调机制。意思是说如果是异步的话,把对应的数据发过去不会等到回调函数结束就直接往下走,直接执行下面的lis刷新。而你操作的那一条数据有可能还没有修改到数据库。这就解释了为什么没有报错对话框就消失了,list因为他刷新时没有看到最新数据,取得还是上一次的数据。因为他是异步的,所以不会等回调,他是两条线执行,他直接往下走,等另一个接收请求处理完回到回调函数时,list方法早就执行完毕了。所以有可能没有拿到最新数据。他在本地执行,速度比回调快多了,所以往往拿不到。我们只要把代码拿上去,放在回调里面就可以了。

image-20230801161934572

实现功能07-删除家居信息

需求分析/图解

image-20230801162747508

思路分析

  1. 完成后台代码从dao -> serivce -> controller , 并对每层代码进行测试
  2. 完成前台代码,使用axios 发送http Ajax 请求,删除数据, 将数据绑定显示

代码实现

  1. 修改FurnService.java 和FurnServiceImpl.java, 增加del 方法

修改FurnService.java

public void del(Integer id);

修改FurnServiceImpl.java

@Override
public void del(Integer id) {furnMapper.deleteByPrimaryKey(id);
}

2.修改FurnServiceTest.java ,测试del.

 @Test
public void del() {furnService.del(1);System.out.println("del ok");
}
  1. 修改FurnController.java , 处理删除请求, 并使用Postman 完成测试
@DeleteMapping("/del/{id}")
@ResponseBody
public Msg del(@PathVariable Integer id) {System.out.println("del id= " + id);furnService.del(id);return Msg.success();
}
  1. 修改HomeView.vue , 编写handleDel 方法, 完成删除
  handleDel(id) {// console.log("id-", id)request.delete("/api/del/" + id).then(res => {if (res.code === 200) {//删除成功//提示一个成功的消息框this.$message({type: "success",message: res.msg})} else { //删除失败//提示一个错误的消息框this.$message({type: "error",message: res.msg})}//刷新页面数据this.list()})}<!--  响应删除点击说明:1、这里通过 handleEdit(scope.row)2, 可以将当前行数据传递给handleEdit--><template #default="scope"><el-button type="text" @click="handleEdit(scope.row)">编辑</el-button><!--  说明1. 如果你点击的确定,就会触发handleDel2. 如果你点击的是取消,就不会触发handleDel--><el-popconfirm title="确认删除吗?" @confirm="handleDel(scope.row.id)"><template #reference><el-button size="small" type="danger">删除</el-button></template></el-popconfirm></template>
  1. 完成测试测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ticBhXKt-1691216417785)(https://gitee.com/nlcwyx/imags/raw/master/imags/202308011637705.png)]

实现功能08-分页显示列表

需求分析/图解

image-20230804211436976

思路分析

  1. 后台使用MyBatis PageHelper 插件完成分页查询, 前端我们使用分页组件。
  2. 修改FurnController , 增加处理分页显示代码API/接口。
  3. 完成前台代码,加入分页导航,并将分页请求和后台接口结合。
  4. 说明:有了现在的MyBatis PageHelper和前端的分页组件,完成分页就非常的方便,但是底层的分页模型和前面我们的java web原生项目一样。

代码实现

  1. 修改pom.xml 加入分页插件
<!-- 引入mybatis pageHelper 分页插件-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.1</version>
</dependency>
  1. 修改mybatis-config.xml, 配置分页拦截器
<!-- plugins 标签要放在typeAliases 标签后面-->
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- 分页合理化,如果pageNum > pages,就让他查询最后一页。如果pageNum < 0,就查询第一页--><property name="reasonable" value="true"/></plugin>
</plugins>
  1. 修改FurnController.java 增加分页查询处理
 /*** 分页请求接口** @param pageNum:  要显示第几页 : 默认为1* @param pageSize: 每页要显示几条记录:默认为5* @return*/@ResponseBody@RequestMapping("/furnsByPage")public Msg listFurnsByPage(@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize) {//设置分页参数//解读//1.调用findAll是完成查询,底层会进行物理分页,而不是逻辑分页//2.会根据分页参数来计算 limit ?, ?, 在发出SQL语句时,会带limit//3.我们后面会给大家抓取SQLPageHelper.startPage(pageNum, pageSize);List<Furn> furnList = furnService.findAll();//将分页查询的结果,封装到PageInfo//PageInfo 对象包含了分页的各个信息,比如当前页面pageNum , 共有多少记录//...PageInfo pageInfo = new PageInfo(furnList, pageSize);//将pageInfo封装到Msg对象,返回return Msg.success().add("pageInfo", pageInfo);}
  1. 使用Postman 进行测试,看看分页查询是否OK

image-20230801182120045

  1. 修改HomeView.vue , 完成分页导航显示、分页请求

在这里插入图片描述
在这里插入图片描述

//增加element-plus 分页控件
<div style="margin: 10px 0"><el-pagination
@size-change="handlePageSizeChange"@current-change="handleCurrentChange":current-page="currentPage":page-sizes="[5,10]":page-size="pageSize"layout="total, sizes, prev, pager, next, jumper":total="total">
</el-pagination>
</div >
</div >
</template >//增加分页初始化数据data() {return {currentPage: 1,pageSize: 5,total: 10,//修改list(), 换成分页请求数据list() { //请求显示家居列表-不带检索request.get("/api/furnsByPage", {params: {pageNum: this.currentPage,pageSize: this.pageSize}}).then(res => {//绑定tableData, 显示在表格this.tableData = res.extend.pageInfo.listthis.total = res.extend.pageInfo.total})}//增加方法, 处理记录的变化, 这两个方法是和分页控件绑定的.//处理每页显示多少条记录变化handlePageSizeChange(pageSize) {this.pageSize = pageSizethis.list()},//处理当前页变化, 比如点击分页连接,或者go to 第几页handleCurrentChange(pageNum) {this.currentPage = pageNumthis.list()}

完成测试

启动项目后台服务furns_ssm
启动项目前台ssm_vue

分页显示效果

测试分页显示效果, 浏览器: http://localhost:9875/

在这里插入图片描述

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

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

相关文章

git之reflog分析

写在前面 本文一起看下reflog命令。 1&#xff1a;场景描述 在开发的过程中&#xff0c;因为修改错误&#xff0c;想要通过git reset命令恢复到之前的某个版本&#xff0c;但是选择提交ID错误&#xff0c;导致多恢复了一个版本&#xff0c;假定&#xff0c;该版本对应的内容…

macOS 环境变量加载探究

使用 macOS 安装环境&#xff0c;见到过很数种环境变量配置方法&#xff0c;每次也都是按照别人的代码&#xff0c;人家配置在哪 我就配置在哪&#xff0c;其实不太清楚有什么区别&#xff0c;决定记录下。 本机 macOS 13.3&#xff0c;从 macOS Catalina(10.15) 开始&#xf…

用html+javascript打造公文一键排版系统15:一键删除所有空格

现在我们来实现一键删除所有空格的功能。 一、使用原有的代码来实现&#xff0c;测试效果并不理想 在这之前我们已经为String对象编写了一个使用正则表达式来删除所有空格的方法&#xff1a; //功能&#xff1a;删除字符串中的所有空格 //记录&#xff1a;20230726创建 Stri…

腾讯云-宝塔添加MySQL数据库

1. 数据库菜单 2. 添加数据库 3. 数据库添加成功 4. 上传数据库文件 5. 导入数据库文件 6. 开启数据库权限 7. 添加安全组 (宝塔/腾讯云) 8. Navicat 连接成功

python 封装sql 增删改查连接MySQL

select * from Teacher limit 10 连接字符串配置MysqlConfig.py class MysqlConfig:HOST 192.168.56.210PORT 3306USER rootPASSWORD 1qaz0987654321DBStudentDBCHARSET utf8封装增删改查MysqlConnection.py Author: tkhywang 2810248865qq.com Date: 2023-06-19 15:44:48 Las…

rest api client code generator

一、搜索&#xff1a;REST API Client Code Generator 二、 安装成功后 配置java环境和node环境

线性代数 | 机器学习数学基础

前言 线性代数&#xff08;linear algebra&#xff09;是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究&#xff0c;同时也涉及到所有的向量空间的一般性质。 本文主要介绍机器学习中所用到的线性代数核心基础概念&#xff0c;供读者学习阶段查漏补缺…

743. 网络延迟时间

有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源节点&#xff0c;vi 是目标节点&#xff0c; wi 是一个信号从源节点传递到目标节点的时间。 现在&#xff0c;…

JNI之Java实现蓝牙交互

蓝牙概述 蓝牙&#xff0c;是一种支持设备短距离通信&#xff08;一般10m内&#xff09;的无线电技术&#xff0c;能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间&#xff0c;通过蓝牙设备之间的无线通信实现数据传输&#xff0c;实现数据传输&#xf…

【计算机视觉|语音分离】期望在嘈杂环境中聆听:一个用于语音分离的不依赖于讲话者的“音频-视觉模型”

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for Speech Separation 链接&#xff1a;Looking to listen at the cocktail party: a speaker-in…

【网络工程】网络流量分析工具 Wireshark

文章目录 第一章&#xff1a;WireShark介绍第二章&#xff1a;WireShark应用第三章&#xff1a;Wireshark 实战 第一章&#xff1a;WireShark介绍 Wireshark (前身 Ethereal)&#xff1a;它是一个强大的网络包分析工具 ! 此工具主要是用来捕获网络数据包的&#xff0c;并且自动…

zookeeper --- 基础篇

一、zookeeper简介 1.1、什么是zookeeper zookeeper官网&#xff1a;https://zookeeper.apache.org/ 大数据生态系统里的很多组件的命名都是某种动物或者昆虫&#xff0c;他是用来管 Hadoop&#xff08;大象&#xff09;、Hive(蜜蜂)、Pig(小 猪)的管理员。顾名思义就是管理…

zabbix触发器标签提取监控项子字符串实现对应告警恢复

0 实验环境 zabbix 6.0 1 监控项 1.1 监控项设置 通过zabbix agent自定义监控项&#xff0c;读取某文件内容模拟日志/trap告警&#xff0c;测试获取触发器标签中提取子字符串功能&#xff0c;以及相同标签的触发器自动恢复功能。 1.2 手工运行 手动触发之后&#xff0c;模…

在centos7上使用非编译方式安装ffmpeg

很多在centos7上安装ffmpeg的教程都需要使用编译方式的安装&#xff1b;编译时间较长而且需要配置; 后来搜索到可以通过加载rpm 源的方式实现快速便捷操作 第一种方式&#xff1a; 首先需要安装yum源&#xff1a; yum install epel-release yum install -y https://mirrors.…

echarts 图例组件legend配置

legend 图例组件展示不同系列的图表类型标记、颜色、和名称。可以通过点击来控制哪个系列不展示。对于饼图来说&#xff0c;控制哪个数据不展示。 $> echarts5.4.0简单画一个饼图作为示例,设置legend:{show:true}展示图例。 const options {legend: {show: true,},series…

Java List(列表)

List 是一个有序、可重复的集合&#xff0c;集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素&#xff0c;可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引&#xff0c;第一个添加到 List 集合中的元素的索引为 0&#xff…

ELK 企业级日志分析系统(ElasticSearch、Logstash 和 Kiabana 详解)

目录 一.ELK简介 1.1ELK的概述 1.2ELK的组成 1.2.1 ElasticSearch 1.2.2 Logstash 1.2.3 Kibana 1.2.4 小总结 1.3可以添加其他组件 1.4filebeat 结合 logstash 带来好处 1.5日志处理的步骤 二.Elasticsearch 2.1Elasticsearch概述 2.2Elasticsearch核心概念 2.2.1接近…

使用可视化docker浏览器,轻松实现分布式web自动化

01、前言 顺着docker的发展&#xff0c;很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试&#xff0c;这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以实现可视化&#xff0c;同时可以对浏览器进行相关的操作。 02、开篇 首先…

【云原生】Docker中容器管理常用所有命令

1.docker 容器创建流程 2.容器运行本质 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 创建容器基本选项&#xff1a;--name&#xff1a;为容器命名 -i&#xff1a;交互式创建容器 -d&#xff1a;后台创建容器 -t&#xff1a;为容器分配伪终端 Docker 容器存在的意义就是为…

机器学习笔记之优化算法(六)线搜索方法(步长角度;非精确搜索;Glodstein Condition)

机器学习笔记之优化算法——线搜索方法[步长角度&#xff0c;非精确搜索&#xff0c;Glodstein Condition] 引言回顾&#xff1a; Armijo Condition \text{Armijo Condition} Armijo Condition关于 Armijo Condition \text{Armijo Condition} Armijo Condition的弊端 Glodstein…