当前位置: 首页 > news >正文

SSM整合项目(删除家居 + 分页查询)

1.删除家居

1.需求分析

image-20240311133121456

2.编写Service层
1.FurnService.java 添加方法
        //删除家居public void del(Integer id);
2.FurnServiceImpl.java 实现方法
    @Overridepublic void del(Integer id) {furnMapper.deleteByPrimaryKey(id);}
3.单元测试
    @Testpublic void del() {furnService.del(3);}

image-20240311133820546

3.编写Controller层
1.FurnController.java 添加处理delete请求的接口
    @DeleteMapping("/del/{id}") //路径参数@ResponseBodypublic Msg del(@PathVariable Integer id) {furnService.del(id);return Msg.success();}
2.postman测试

image-20240311134607948

4.修改 HomeView.vue实现删除功能
1.找到删除按钮位置添加确认弹窗
      <el-table-column fixed="right" label="操作" width="120"><template #default="scope"><!--#default="scope"然后使用scope.row可以获取当前行的数据--><el-button @click="handleEdit(scope.row)" type="text">编辑</el-button><!--这里的@confirm事件,当用户点击确定的时候会触发--><el-popconfirm title="确认删除" @confirm="deleteById(scope.row.id)"><template #reference><el-button type="danger" size="small">删除</el-button></template></el-popconfirm></template></el-table-column>
2.编写删除家居方法
    //删除家居deleteById(id) {//这里是使用的模板字符串来取数据request.delete(`/api/del/${id}`).then(res => {//code是200则表示修改成功if (res.code === 200) {//弹出更新成功的消息框this.$message({type: "success",message: "删除成功!"})} else {//删除失败//弹出更新失败的消息框this.$message({type: "error",message: "删除失败!"})}//刷新页面this.list()})}
5.结果展示

image-20240311161754590

image-20240311161805597

6.课后练习:将表单回显方式改为从数据库获取信息
1.编写Service层
1.FurnService.java 添加方法
        //根据id获取家居信息public Furn findById(Integer id);
2.FurnServiceImpl.java 实现方法
    @Overridepublic Furn findById(Integer id) {Furn furn = furnMapper.selectByPrimaryKey(id);return furn;}
2.编写Controller层
FurnController.java 添加方法
    @ResponseBody@GetMapping("/findById/{id}")public Msg findById(@PathVariable Integer id) {Furn furn = furnService.findById(id);//将查询结果添加到成功的Msg对象中return Msg.success().add("furn", furn);}
3.HomeView.vue 修改编辑按钮

image-20240311163345902

4.HomeView.vue 编写触发方法
    handleEditById(id) {request.get(`/api/findById/${id}`).then(res => {//将数据绑定到modelthis.form = res.extend.furn;//显示提示框this.dialogVisible = true;})//根据id进行查询并回显结果}
5.结果展示

image-20240311163523456

2.分页展示

1.需求分析

image-20240311140113289

2.思路分析

image-20240311140137773

3.引入mybais pageHelper插件 pom.xml
  <!--  引入mybais pageHelper插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.1</version></dependency>
4.配置mybatis分页拦截器 mybatis-config.xml
    <!--配置mubatis分页拦截器--><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><!--配置分页合理化1.当用户请求的页数大于最后一页时,显示查询最后一页2.当用户请求的页数小于第一页时,显示查询第一页--><property name="reasonable" value="true"/></plugin></plugins>
5.编写Controller
    //分页功能接口@RequestMapping("/furnsByPage")@ResponseBodypublic Msg listFurnsByPage(@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize) {//1.设置分页参数PageHelper.startPage(pageNum, pageSize);//2.查询所有数据List<Furn> all = furnService.findAll();//3.进行物理分页pageInfo存放了分页的信息PageInfo pageInfo = new PageInfo(all, pageSize);return Msg.success().add("pageInfo", pageInfo);}
6.postman测试

image-20240311144458531

7.HomeView.vue 引入分页控件
1.在div的最下面引入分页导航控件
<!--    增加分页导航--><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>
2.数据池设置三个数据

image-20240311165429583

3.结果展示

image-20240311165439777

8.前端分页请求
1.HomeView.vue 修改list方法
    //请求返回家居(分页)list() {request.get("/api/furns").then(// res => {//   console.log(res)//   this.tableData = res.extend.furnList// }//请求分页request.get("/api/furnsByPage", {params: {//相当于双向绑定的modelpageNum: this.currentPage,pageSize: this.pageSize}}).then(res => {//将返回的json对象数组给tableData,进行遍历展示数据console.log(res)this.tableData = res.extend.pageInfo.list}))}
2.结果展示

image-20240311175730627

9.根据pageNo和PageSize的变化实时分页
1.HomeView.vue 添加两个方法
    //当view的currentPage发生变化,pageNo就代表了当前页号handleCurrentChange(pageNo) {//替换model中的当前页号this.currentPage = pageNo;//根据model发送分页请求this.list();},//当view的pageSize发生变化,则会传到这个函数handlePageSizeChange(pageSize) {this.pageSize = pageSize;this.list();}
2.结果展示

image-20240311182814187

10.前端分页查询三部曲(示意图)

image-20240311183724736

11.条件分页
1.需求分析

image-20240311183943655

2.编写Service层
1.FurnService.java 添加方法
        //根据条件模糊查询public List<Furn> findByCondition(String name);
2.FurnServiceImpl.java 实现方法
    @Overridepublic List<Furn> findByCondition(String name) {FurnExample furnExample = new FurnExample();//使用这个对象来添加条件FurnExample.Criteria criteria = furnExample.createCriteria();//判断是否有查询条件if (StringUtils.hasText(name)) {//添加根据传进来的名字进行模糊查询criteria.andNameLike("%" + name + "%");}//进行查询//注意:这里如果是没有传参数,则会查询出所有的记录return furnMapper.selectByExample(furnExample);}
3.单元测试
    @Testpublic void findByCondition() {List<Furn> list = furnService.findByCondition("桌子");for (Furn furn : list) {System.out.println(furn);}}

image-20240311194226625

3.编写Controller层
1.FurnController.java
    //条件分页接口@RequestMapping("/listFurnsByCondition")@ResponseBodypublic Msg listFurnsByCondition(@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize, @RequestParam(defaultValue = "") String search) {//1.设置分页参数PageHelper.startPage(pageNum, pageSize);//2.查询所有数据List<Furn> byCondition = furnService.findByCondition(search);//3.进行分页PageInfo pageInfo = new PageInfo(byCondition, pageSize);return Msg.success().add("pageInfo", pageInfo);}
2.postman测试

image-20240311195843981

4.前端分页请求
1.双向绑定输入框信息,为查找绑定点击事件

image-20240311204416837

2.编写根据model进行分页查询的函数
    //根据条件进行分页查询findByCondition() {request.get("/api/listFurnsByCondition", {params: {//根据model的数据进行分页查询pageNum: this.currentPage,pageSize: this.pageSize,search: this.search}}).then(res => {//渲染view,并设置totalconsole.log(res)this.total = res.extend.pageInfo.total;this.tableData = res.extend.pageInfo.list;})}
3.解决点击页号则不会进行条件查询的问题
    //当view的currentPage发生变化,pageNo就代表了当前页号handleCurrentChange(pageNo) {//替换model中的当前页号this.currentPage = pageNo;//根据model发送分页请求if (this.search) { //只要search有值,则进行条件分页查询this.findByCondition();} else {this.list();}},//当view的pageSize发生变化,则会传到这个函数handlePageSizeChange(pageSize) {this.pageSize = pageSize;if (this.search) { //只要search有值,则进行条件分页查询this.findByCondition();} else {this.list();}}
5.结果展示
1.条件分页第一页

image-20240311204813679

2.条件分页第二页

image-20240311204831340

12.分页查询总结

image-20240311210215825

相关文章:

SSM整合项目(删除家居 + 分页查询)

1.删除家居 1.需求分析 2.编写Service层 1.FurnService.java 添加方法 //删除家居public void del(Integer id);2.FurnServiceImpl.java 实现方法 Overridepublic void del(Integer id) {furnMapper.deleteByPrimaryKey(id);}3.单元测试 Testpublic void del() {furnService.…...

记录一下go的包管理

如何降低版本 假设go版本go 1.16运行项目&#xff0c; 查看运行报错&#xff0c;根据报错信息&#xff0c;一条一条解决 go run main.go错误: /home/server1/go/pkg/mod/google.golang.org/grpcv1.58.2/internal/buffer/unbounded.go:92:34: undefined: any类似这样的报错提醒…...

【APB协议 UVM_Sequencer Driver Monitor_2024.03.04】

apb协议 写时序 地址、写信号、PSEL、写数据信号同时发生变化&#xff0c;即传输的第一个时钟被称为SETUP周期。在下个时钟上升沿,PENABLE信号拉高&#xff0c;表示ENABLE周期&#xff0c;在该周期内&#xff0c;数据、地址以及控制信号都必须保持有效。整个写传输在这个周期…...

C++ Qt开发:QFileSystemWatcher文件监视组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QFileSystemWatcher组件实现对文件或…...

window Zookeeper 启动;

文章目录 前言一、Zookeeper 介绍&#xff1a;二、window 使用&#xff1a;2.1 下载&#xff1a;2.2 启动2.3 连接&#xff1a; 总结 前言 本文对window Zookeeper zk 启动 进行介绍&#xff1b; 一、Zookeeper 介绍&#xff1a; ZooKeeper 是一个开源的分布式协调服务&#…...

数据分析-Pandas如何画图验证数据随机性

数据分析-Pandas如何画图验证数据随机性 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…...

地球系统模式(CESM)

目前通用地球系统模式&#xff08;Community Earth System Model&#xff0c;CESM&#xff09;在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来&#xff0c;一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…...

数据通信练习题

1.0osi七层模型 应用层 data 表示层 会话层 传输层 数据段 防火墙&#xff0c;端口&#xff08;TCP UDP&#xff09; 网络层 数据包 路由器 数据链路层 数据帧 交换机 物理层 比特流 网卡 2.IP地址分类 私有地址 A类 0--127 10.0.0.0…...

本地部署推理TextDiffuser-2:释放语言模型用于文本渲染的力量

系列文章目录 文章目录 系列文章目录一、模型下载和环境配置二、模型训练&#xff08;一&#xff09;训练布局规划器&#xff08;二&#xff09;训练扩散模型 三、模型推理&#xff08;一&#xff09;准备训练好的模型checkpoint&#xff08;二&#xff09;全参数推理&#xff…...

设计模式: 模板方法模式

文章目录 一、什么是模板方法模式二、模板方法模式结构三、优点 一、什么是模板方法模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个操作中的算法骨架&#xff0c;将一些步骤延迟到子类中实现。这样可以使得子类…...

C++ 打印输出十六进制数 指定占位符前面填充0

C 打印十六进制数据&#xff0c;指定数据长度&#xff0c;前面不够时&#xff0c;补充0. 代码如下&#xff1a; #include <iostream> #include <iomanip> #include <cmath>using namespace std;int main() {unsigned int id 0xc01;unsigned int testCaseId…...

基于 Win Server 2008 复现 IPC$ 漏洞

写在前面 本篇博客演示了使用 winXP&#xff08;配合部分 win10 的命令&#xff09;对 win server 2008 的 IPC$ 漏洞进行内网渗透&#xff0c;原本的实验是要求使用 win server 2003&#xff0c;使用 win server 2003 可以规避掉很多下面存在的问题&#xff0c;建议大家使用 …...

HTML笔记2

11&#xff0c;路径 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> <…...

使用Docker实现Jenkins+Python + Pytest +Allure 接口自动化

一、Jenkins搭建 参考《Docker 安装 Jenkins》 进入 jenkins 容器 CLI 界面 docker exec -itu root jenkins /bin/bash二、准备条件 1、替换镜像内源 为了安装wget&#xff0c;默认用yum会安装不上wget命令&#xff0c;参考文章《docker容器内如何更换yum源【只想换成国内…...

论企业安全漏洞扫描的重要性

前言 随着信息技术的迅猛发展和互联网的广泛普及&#xff0c;网络安全问题日益凸显。在这个数字化的世界里&#xff0c;无论是企业还是个人&#xff0c;都面临着前所未有的安全威胁。安全漏洞&#xff0c;作为这些威胁的源头&#xff0c;常常被忽视或无法及时发现。 而安全漏洞…...

23.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-实现配置工具数据结构

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;22.加载配置文件…...

STM32CubeMX学习笔记20——SD卡FATFS文件系统

1. FATFS文件系统简介 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构&#xff08;即在存储设备上组织文件的方法&#xff09;。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统&#xff0c;简称文件系统&#xff1b;不带文件系统的SD卡仅能…...

Facebook商城号为什么被封?如何防封?

由于Facebook商城的高利润空间&#xff0c;越来越多的跨境电商商家注意到它的存在。Facebook作为全球最大、用户量最大的社媒平台&#xff0c;同时也孕育了一个巨大的商业生态&#xff0c;包括广告投放、商城交易等。依托背后的大流量&#xff0c;Facebook商城起号较快&#xf…...

【教程】APP备案全攻略:确保你的应用合规上线

【教程】APP备案全攻略&#xff1a;确保你的应用合规上线 摘要 本文详细介绍了中国大陆地区互联网信息服务提供者&#xff08;AP&#xff09;进行APP备案的流程、要求和注意事项。包括备案对象、备案方式、备案内容、备案流程等方面的详细说明&#xff0c;帮助开发者顺利完成…...

Vue入门2

v-model 原理&#xff1a;v-model本质上是一个语法糖。例如应用于输入框&#xff0c;就是value属性和input事件的合写。 作用&#xff1a;提供数据的双向绑定 数据变&#xff0c;视图跟着变 :value视图变&#xff0c;数据跟着变 input 注意&#xff1a;$event用于在模板中&…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...