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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript基础6之执行上下文、作用域链、函数创建、函数激活、checkScope的执行过程、闭包、this

JavaScript基础 执行上下文执行上下文中的属性变量对象全局上下文的变量对象函数上下文执行过程进入执行上下文代码执行思考题 作用域链函数创建函数激活checkScope的执行过程总结 闭包分析闭包 this 执行上下文 执行上下文中的属性 每一个执行上下文都有三个核心属性 变量对…

haproxy-高性能负载均衡反向代理服务

目录 一、HAProxy&#xff08;High Availability Proxy&#xff09;概述 1、HAProxy的概念 2、HAProxy的主要特性 3、HAProxy的优缺点 4、Haproxy负载均衡策略 5、LVS、nginx、HAProxy的区别 二、安装HAProxy 1、yum安装 2、第三方rpm包安装 3、编译安装 3.1 解决 l…

【AI视频教程】只需5步,AI作出鸡你太美视频

1.视频效果 2.准备工作 制作视频效果&#xff0c;需要准备下面3个条件&#xff1a; 准备stable diffusion的环境剪辑一段【鸡你太美】原版视频stable diffusion安装sd-webui-IS-NET-pro插件 2.1部署stable diffusion环境 这里还是建议大家用云平台部署stable diffusion&am…

一个测开人员的大厂面试总结

前言 其实我已经入职有好一段时间了&#xff0c; 这里决定总结一下一些面试经验。 我呢&#xff0c;最终还是决定要离开服务了 5 年多的公司。 而这次跳槽历经 3 个月&#xff0c;前后聊了 10 家公司&#xff0c;进行了将近 40 场面试, 基本都是 41 的流程 (技术面 HR 面)&…

计算机网络-第5章 运输层(2)

5.6 TCP可靠传输实现 以字节为单位的滑动窗口。 发送窗口已满&#xff0c;停止发送。 发送和接收的数据都来自缓存。 超时重传时间RTO选择&#xff1a;自适应算法&#xff0c; 选择确认SACK&#xff1a;只传送缺少的数据。大多数实现还是重传所有未被确认的数据块。 5.7 TCP的…

小程序学习 1

pages/goods/search/home.wxml首页功能设定 1. loading入场 2. 下拉刷新 3. 搜索栏 4. 分类切换 5. 商品列表 6. 规格弹层 7. 加载更多 <view style"text-align: center; color: #b9b9b9" wx:if"{{pageLoading}}"><t-loading theme"circula…

网络安全防御保护 Day7

1.因为FW1和FW2已处于双机热备状态&#xff0c;所以只需要对主设备进行配置即可。进入FW1的配置界面&#xff0c;选择“网络”界面&#xff0c;点击“IPsec”&#xff0c;进行IPsec通道的基本配置&#xff0c;这里选择的是“电信”链路。 2.完成上述配置后&#xff0c;进行待加…

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

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

【DPDK】基于dpdk实现用户态UDP网络协议栈

文章目录 一.背景及导言二.协议栈架构设计1. 数据包接收和发送引擎2. 协议解析3. 数据包处理逻辑 三.网络函数编写1.socket2.bind3.recvfrom4.sendto5.close 四.总结 一.背景及导言 在当今数字化的世界中&#xff0c;网络通信的高性能和低延迟对于许多应用至关重要。而用户态网…

并发通信(网络进程线程)

如果为每个客户端创建一个进程&#xff08;或线程&#xff09;&#xff0c;因为linux系统文件标识符最多1024位&#xff0c;是有限的。 所以使用IO复用技术&#xff0c;提高并发程度。 阻塞与非阻塞 阻塞式复用 非阻塞复用 信号驱动IO 在属主进程&#xff08;线程中声明&…

4、Generator、class类、继承、Set、Map、Promise

一、生成器函数Generator 1、声明generator函数 function* 函数名() { }调用生成器函数 需要next()返回一个generator对象&#xff0c;对象的原型上有一个next(),调用返回对象{value:yield后面的值,done} function* fn() {console.log("我是生成器函数") } let it…

JAVA开发常见小问题整合

文章目录 1&#xff1a;身份证工具类相关方法1.1 身份证脱敏处理 2&#xff1a;字符串补零处理(此处是JAVA类的方法&#xff0c;并无引用StrUtil)3&#xff1a;springboot前后端分离&#xff0c;后端返回json字符串带斜杠问题处理4&#xff1a;WebUploader 文件上传组件 -编辑回…

java基本认识?java跨平台原理?jdk、jre、jvm的联系?

1、java基本认识 1.1 java语言 语言&#xff1a;人与人交流沟通的方式。比如&#xff0c;你好、hello等。 计算机语言&#xff1a;人与计算机之间进行信息交流的一种特殊方式。比如&#xff0c;Java语言、C语言、C等。 1.2 java的来源 Java 是由 Sun Microsystems 公司于 …

如何正确选择国外服务器的带宽和线路呢?

国外大带宽服务器是一种提供高带宽、高速网络连接和良好稳定性的服务器&#xff0c;但在中国使用这类服务器可能涉及到违反法律法规的风险。因此我无法为你提供相关帮助。接下来和源库一起了解如何正确选择国外服务器的带宽和线路呢? 考虑目标用户的地理位置。如果目标用户主要…

计算机网络-第5章 运输层(1)

主要内容&#xff1a;进程之间的通信与端口、UDP协议、TCP协议、可靠传输原理&#xff08;停止等待协议、ARQ协议&#xff09;、TCP报文首部、TCP三大题&#xff1a;滑动窗口、流量控制、拥塞控制机制 5.1 运输层协议概述 运输层向它上面的应用层提供通信服务&#xff0c;真正…

window Zookeeper 启动;

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

辽宁博学优晨教育:视频剪辑培训的安全正规之路

在当今数字化时代&#xff0c;视频剪辑已成为一项炙手可热的技能。为满足广大学习者的需求&#xff0c;辽宁博学优晨教育推出了一系列专业的视频剪辑培训课程。本文将重点介绍辽宁博学优晨教育的视频剪辑培训如何在保障学员安全和学习效果方面做出了卓越的努力。 一、正规资质&…

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:/…

5款好用的AI办公软件,一键轻松制作PPT、视频,提升工作效率!

众所周知&#xff0c;AI 人工智能技术已渗透到生活的方方面面&#xff0c;无论是很多人早已用上的智能音箱、语音助手&#xff0c;还是新近诞生的各种 AI 软件工具&#xff0c;背后都离不开 AI 人工智能技术的加持。 对于各类新生的 AI 软件工具&#xff0c;人们很容易「选边站…

free pascal 调用 C#程序读 Freeplane.mm文件,生成测试用例.csv文件

C# 请参阅&#xff1a;C# 用 System.Xml 读 Freeplane.mm文件&#xff0c;生成测试用例.csv文件 Freeplane 是一款基于 Java 的开源软件&#xff0c;继承 Freemind 的思维导图工具软件&#xff0c;它扩展了知识管理功能&#xff0c;在 Freemind 上增加了一些额外的功能&#x…