当前位置: 首页 > 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用于在模板中&…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...