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

news2024/11/16 7:40:24

1.删除家居

1.需求分析

image-20240311133121456

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

image-20240311133820546

3.编写Controller层
1.FurnController.java 添加处理delete请求的接口
    @DeleteMapping("/del/{id}") //路径参数
    @ResponseBody
    public 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 实现方法
    @Override
    public 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 => {
            //将数据绑定到model
            this.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")
    @ResponseBody
    public 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: {
              //相当于双向绑定的model
              pageNum: 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 实现方法
    @Override
    public 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.单元测试
    @Test
    public void findByCondition() {
        List<Furn> list = furnService.findByCondition("桌子");
        for (Furn furn : list) {
            System.out.println(furn);
        }
    }

image-20240311194226625

3.编写Controller层
1.FurnController.java
    //条件分页接口
    @RequestMapping("/listFurnsByCondition")
    @ResponseBody
    public 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,并设置total
            console.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.coloradmin.cn/o/1508768.html

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

相关文章

超越 Siri 和 Alexa:探索LLM(大型语言模型)的世界

揭秘LLM&#xff1a;语言模型新革命&#xff0c;智能交互的未来趋势 近年来&#xff0c;虚拟助手的世界发生了重大转变。 虽然 Siri 和 Alexa 本身就是革命性的&#xff0c;但一种称为大型语言模型 (LLM) 的新型人工智能正在将虚拟助手的概念提升到一个全新的水平。 在这篇博文…

面试官:线程调用2次start会怎样?我支支吾吾没答上来

写在开头 在写完上一篇文章《Java面试必考题之线程的生命周期&#xff0c;结合源码&#xff0c;透彻讲解!》后&#xff0c;本以为这个小知识点就总结完了。 但刚刚吃晚饭时&#xff0c;突然想到了多年前自己面试时的亲身经历&#xff0c;决定再回来补充一个小知识点&#xff…

Mybatis-Plus——04,自动填充时间(新注解)

自动填充&#xff08;新注解&#xff09; 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…

汽车软件市场迅猛扩张,Perforce Helix Core与Helix IPLM助力汽车软件开发的版本控制及IP生命周期管理

汽车软件世界正处于持续变革和转型之中。从自动驾驶汽车到电动汽车和先进的驾驶辅助系统&#xff0c;汽车软件的集成度和复杂性不断提升。 据美国电气与电子工程师协会的研究&#xff0c;如今大多数汽车都集成了超过1亿行代码&#xff0c;而仅仅十年前&#xff0c;这种水平的汽…

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

掌握Mongodb,看完这篇文章就够了

目录 1.概念 2.操作 2.1数据库操作 2.2集合操作 2.3数据操作 3.查询 4.常用技术 5.python与MongoDB 1.概念 MongoDB是一种非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它以灵活的文档存储格式&#xff08;BSON&#xff09;和强大的查询能…

数据集踩的坑及解决方案汇总

数据集踩的坑及解决方案汇总 数据集各种格式构建并训练自己的数据集汇总Yolo系列SSDMask R-CNN报错 NotADirectoryError: [Errno 20] Not a directory: /Users/mia/Desktop/P-Clean/mask-RCNN/PennFudanPed2/labelme_json/.DS_StoreFaster R-CNN数据的格式转换划分数据集设定内…

5天获限定访问学者Offer|新加坡南洋理工大学申请公派成功

L老师拟申报某公派访问学者项目&#xff0c;要求半个月内获得新加坡国立大学或者南洋理工大学的邀请函。我们利用广泛的资源和丰富的申请经验&#xff0c;高效运作&#xff0c;仅仅5天就获得了新加坡南洋理工大学的邀请函&#xff0c;提前完成申请人的委托。 L老师背景&#xf…

OpenStack安装步骤

一、准备OpenStack安装环境 1、创建实验用的虚拟机实例。 内存建议16GB&#xff08;8GB也能运行&#xff09;CPU&#xff08;处理器&#xff09;双核且支持虚拟化硬盘容量不低于200GB&#xff08;&#xff01;&#xff09;网络用net桥接模式 运行虚拟机 2、禁用防火墙与SELin…

力扣题目训练(18)

2024年2月11日力扣题目训练 2024年2月11日力扣题目训练561. 数组拆分566. 重塑矩阵572. 另一棵树的子树264. 丑数 II274. H 指数127. 单词接龙 2024年2月11日力扣题目训练 2024年2月11日第十八天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括简单题3道、中等…

使用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源【只想换成国内…

window Zookeeper 启动;

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

软考攻略/软考详解/软考等级/软考科目

目录 前言 一、软考是什么 二、证书样式 三、软考介绍 3.1 什么是软考? 3.2 通过了软考&#xff0c;就算有职称了么? 3.3 哪些人可以参加软考? 3.4 软考设置了哪些资格? 3.5 哪些资格含金量比较高呢?报考建议? 四、中级资格推荐以下几个: 计算机软件类 --软件…

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

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

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

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

MinGW-w64的下载与安装

文章目录 1 下载2 安装3 配置环境变量4 验证 1 下载 官网地址&#xff1a;https://www.mingw-w64.org/github地址&#xff1a;https://github.com/niXman/mingw-builds-binaries/releases windows下载 跳转github下载 版本号选择&#xff1a;13.2.0是GCC的版本号&#xff1b…

网络攻防中nginx安全配置,让木马上传后不能执行、让木马执行后看不到非网站目录文件、命令执行后权限不能过高

网络攻防中nginx安全配置,让木马上传后不能执行、让木马执行后看不到非网站目录文件、命令执行后权限不能过高。 0x01 Nginx介绍 nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发…

PID控制器组(完整SCL代码)

PID控制器组不是什么新概念,是在PID控制器的基础上,利用面向对象的思想对对象进行封装 批量实例化。 1、增量式PID https://rxxw-control.blog.csdn.net/article/details/124363197https://rxxw-control.blog.csdn.net/article/details/1243631972、完全增量式PID https:/…

EE5437-IOT(Lecture 07-Control Interface System)

Review&#xff1a; introduce the micro input device system&#xff08;MIDS&#xff09; • The calibration and testing has been covered • The introduction to filters with the example called Butterworth filter and the maths have been also demonstrated. …

计算机网络基础【信息系统监理师】

计算机网络基础【信息系统监理师】 1、OSI七层参考模型2、TCP/IP协议3、网络拓扑结构分类4、网络传输介质分类5、网络交换技术6、网络存储技术7、网络规划技术8、综合布线系统8.1、综合布线工程内容8.1、隐蔽工程-金属线槽安装8.2、隐蔽工程-管道安装槽道与各种管线间的最小净距…