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

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

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

相关文章

微信公众号调用沙箱支付

沙箱支付 登录支付宝开放平台&#xff0c;选择底部沙箱支付 下载密钥生成工具 生成应用私钥与公钥&#xff0c;上传沙箱支付&#xff0c;获得支付宝公钥 配置支付通知与支付回调地址 SpringBoot配置 yml文件 这里的地址必须与沙箱配置的一样 controller package com.zq…

植物病害识别:YOLO水稻病害识别数据集(11000多张,yolo标注)

YOLO水稻病害识别数据集&#xff0c;包含叶斑病&#xff0c;褐斑病&#xff0c;细菌性枯萎病&#xff0c;东格鲁病毒病4个常见病害类别&#xff0c;共11000多张图像&#xff0c;yolo标注完整&#xff0c;可直接训练。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c…

第十五届蓝桥杯-UART接收不定长指令的处理

学习初衷&#xff1a; 不仅仅为了比赛&#xff01; 目录 一、问题引入 二、UART常用的三种工作模式 1.UART工作在中断模式 2.UART工作在DMA模式下 3.uart工作在接收转空闲的模式下 三、获取指令中需要的数据 四、printf函数的实现 一、问题引入 问题引入&#xff1a;请…

【Java】仓库管理系统 SpringBoot+LayUI+DTree(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

深度学习Top10算法

自2006年深度学习概念被提出以来&#xff0c;20年快过去了&#xff0c;深度学习作为人工智能领域的一场革命&#xff0c;已经催生了许多具有影响力的算法。以下是深度学习top10算法&#xff0c;它们在创新性、应用价值和影响力方面都具有重要的地位。 1、深度神经网络&#xf…

鸿蒙开发(四)-低代码开发

鸿蒙开发(四)-低代码开发 本文主要介绍下鸿蒙下的低代码开发。 鸿蒙低代码是指在鸿蒙操作系统进行应用开发时&#xff0c;采用简化开发流程和减少编码量的方式来提高开发效率。 1&#xff1a;开启低代码开发 首先我们打开DevEco Studio .然后创建工程。 如图所示&#xff…

定制红酒:如何根据客户需求调整红酒口感与风格

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知不同消费者对于红酒的口感与风格有着不同的喜好和需求。因此&#xff0c;云仓酒庄洒派根据消费者的具体要求&#xff0c;灵活调整红酒的口感与风格&#xff0c;以满足他们的期望。 首先&#xff0c;云仓酒庄洒派会与消费者进行深入的…

AHU 汇编 实验三

实验名称&#xff1a;实验三 串操作指令 二、实验内容&#xff1a; 在数据段定义缓冲区&#xff0c;从键盘接收两串字符到两个缓冲区&#xff0c;将第二串中与第一串字符不一致的字符显示在屏幕。 实验过程&#xff1a; 源代码&#xff1a; data segmentmess1 db 16,?,16…

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

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

【字典合集】SecLists-更全面的渗透测试字典 v2024.1

下路路径 SecLists-更全面的渗透测试字典 v2024.1 简介 SecLists 是一个致力于收集各种安全字典的开源项目。这些字典包括但不限于&#xff1a;密码字典、用户名字典、网络扫描结果、漏洞利用载荷、web shells、可用于渗透测试的Payloads、以及其他各种安全相关的字典。 这…

Docker初体验之安装部署和镜像加速(openeuler版)

安装部署&#xff1a; 本人使用的为openeuler版本&#xff0c;无法使用二进制进行安装&#xff08;使用二进制安装时&#xff0c;无法使用docker中的补全命令&#xff0c;需要重新进行配置&#xff09;在此使用yum直接进行安装。 [rootlocalhost ~]# yum install docker 镜像…

在VMvare中虚拟机安装centos7和初始设置

下载镜像 阿里云的镜像站&#xff1a;https://mirrors.aliyun.com/centos/7/isos/x86_64/ 创建虚拟机过程 虚拟机创建过程比较简单&#xff0c;以下在VMvare16中进行安装 点击左上角&#xff0c;文件-新建虚拟机&#xff1a; 选择典型 选择刚刚下载好的镜像 输入虚拟机…

如何判断DNS解析故障?

DNS解析负责将域名解析到对应的IP地址&#xff0c;从而实现用户通过域名访问站点的效果。因此DNS解析是整个互联网中非常关键和基础的一个环节&#xff0c;但也是众多网站运营者和管理者经常忽视的一个环节。所以在出现DNS解析错误时&#xff0c;很多人都会感到手足无措&#x…

【Echarts】曲线图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

第七次作业

IPSEC VPPN实验配置 目标&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 1.FW1和FW2进行双机热备&#xff08;之前实验没保存&#xff0c;可看上个实验&#xff09; 还有一些配置前面实验有。 2.场景选择点对点…

探究精酿啤酒的秘密:原料中的天然酵母与纯净水质

在啤酒的世界中&#xff0c;Fendi Club精酿啤酒以其与众不同的口感和深远的余味吸引了全球的啤酒爱好者。而这一切&#xff0c;都归功于其选用的上好原料&#xff0c;特别是天然酵母和纯净水质。 天然酵母是啤酒的灵魂。与工业生产的啤酒酵母不同&#xff0c;天然酵母富含丰富的…

分布式之Ribbon使用以及原理

Ribbon使用以及原理 1、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去&#xff0c;nginx作为反向代理&#xff0c;然后路由给后端的服务器&#xff0c;由于负载均衡算法是nginx提供的&#xff0c;而nginx是部署到服务器端的&#xff0c;所…

20240310-1-Java后端开发知识体系

Java 基础 知识体系 Questions 1. HashMap 1.8与1.7的区别 1.71.8底层结构数组链表数组链表/红黑树插入方式头插法尾插法计算hash值4次位运算5次异或运算1次位运算1次异或运算扩容、插入先扩容再插入先插入再扩容扩容后位置计算重新hash原位置或原位置旧容量 (1) 扩容因子…

论文笔记:Evaluating the Performance of Large Language Models on GAOKAO Benchmark

1 论文思路 采用zero-shot prompting的方式&#xff0c;将试题转化为ChatGPT的输入 对于数学题&#xff0c;将公式转化为latex输入 主观题由专业教师打分 2 数据 2010~2022年&#xff0c;一共13年间的全国A卷和全国B卷 3 结论 3.1 不同模型的zeroshot 高考总分 3.2 各科主…

掘根宝典之C++类型别名,关键字typedef,auto,decltype

类型别名 在C中&#xff0c;我们可以使用typedef关键字或using关键字来创建类型别名。下面是两种方式的示例&#xff1a; 使用typedef关键字创建类型别名&#xff1a; typedef int myInt; typedef float myFloat;myInt a;//等价int a; myFloat b;//等价float b; 使用using关…