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

WEB应用技术第十次作业-分页PageHelper

一、整体思路

  • 前端传递两个参数:page(当前页码)、pageSize(每页数据条数)
  • Service 层手动计算分页起始下标:start = (page -1)*pageSize
  • Mapper 写两条 SQL:
    • 一条统计符合条件数据总条数select count(*) from 表
    • 一条使用 limit 截取当前页数据select * from 表 limit start,pageSize
  • 自定义PageBean实体封装总条数 total、当前页数据 rows,统一返回前端

二、实现代码

1.新建分页封装类 PageBean

package com.example.myweb.pojo; import lombok.Data; import java.util.List; @Data public class PageBean { private Long total; //总商品条数 private List<Goods> rows; //当前页商品数据 }

2.GoodsMapper新增两条分页 SQL

//1. 多条件统计商品总数量 @Select("<script>SELECT count(*) FROM goods <where>" + "<if test='name != \"\"'>name LIKE CONCAT('%',#{name},'%')</if>" + "<if test='category != \"\"'>category=#{category}</if></where></script>") Long countByCondition(@Param("name")String name,@Param("category")String category); //2. limit分页查询商品 @Select("<script>SELECT * FROM goods <where>" + "<if test='name != \"\"'>name LIKE CONCAT('%',#{name},'%')</if>" + "<if test='category != \"\"'>category=#{category}</if></where>" + "ORDER BY create_time DESC limit #{start},#{pageSize}</script>") List<Goods> selectPageData(@Param("start")Integer start, @Param("pageSize")Integer pageSize, @Param("name")String name, @Param("category")String category);

3.GoodsServiceImpl 分页业务

@Override public PageBean goodsPage(Integer page,Integer pageSize,String name,String category){ //页码容错 int safePage = page==null||page<1 ? 1 : page; int safeSize = pageSize==null||pageSize<1 ? 10 : pageSize; //计算起始偏移量 int start = (safePage-1)*safeSize; //查询总条数 Long total = goodsMapper.countByCondition(name,category); //分页截取数据 List<Goods> list = goodsMapper.selectPageData(start,safeSize,name,category); return new PageBean(total,list); }

4.GoodsController 接口

@GetMapping public Result<PageBean> goodsPage( @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(required = false) String name, @RequestParam(required = false) String category ){ PageBean pageBean = goodsService.goodsPage(page,pageSize,name,category); return Result.success(pageBean); }

5.前端取值

axios.get("http://localhost:8080/goods?"+params).then(res=>{ if(res.data.code === 1){ this.goodsList = res.data.data.rows; this.totalCount = res.data.data.total; } })
http://www.jsqmd.com/news/1142091/

相关文章:

  • 终极指南:5分钟掌握本地视频字幕提取技术,告别云端隐私风险
  • 计算机毕业设计之基于SSM的网上家居商城系统的设计与实现
  • 3分钟快速上手:Chrome二维码插件终极指南,轻松实现网页跨设备分享
  • PCF8591与MKV44F64VLH16的信号转换系统设计与实现
  • ICM-42688-P与GD32VF103VBT6在工业传感器与嵌入式系统中的应用
  • 鸣潮游戏模组终极指南:解锁无限可能的完整解决方案
  • MC6470与PIC18F85J50的六轴IMU系统设计与姿态解算
  • 网易云音乐自动化听歌升级:快速实现每日300首打卡的完整指南
  • TB9051FTG直流电机静音驱动方案与MK60DN512VLQ10控制实践
  • 猫抓浏览器插件:网页媒体资源的高效捕获与管理方案
  • 百度地图区域检索对比:圆形、矩形、多边形3种POI查询方案与性能考量
  • IIM-20670运动传感器与MKV46F256VLH16微控制器的工业应用解析
  • STM32F107VCT6与SLO2016工业通信方案解析
  • 全要素智控架构解析:水文监测如何从“数据堆叠”走向“决策赋能”
  • epkg-autopkg高级用法:自定义配置与扩展支持Ruby/Perl/Node.js/Golang语言
  • Photon光影包:Minecraft终极视觉增强完全指南
  • 外贸B2B企业谷歌SEO:为什么排名上去了却没有询盘 上面为
  • 鸣潮游戏模组终极指南:如何用WuWa-Mod解锁无限游戏乐趣
  • 聚酯缩聚反应在线粘度测量技术解析——PET熔体的流变监测与过程控制
  • 20分钟精通EdgeFlow:从Blender新手到边缘循环调整专家
  • ONNX模型简化终极指南:如何快速优化深度学习部署模型
  • MAX9744与MKV58F1M0VLQ24音频增强方案解析
  • Windows Cleaner深度解析:开源系统优化工具的5大核心优势
  • OpenUtau 5步快速入门:免费开源的跨平台人声合成平台终极指南
  • 如何选择适合内网部署的企业知识库技术栈
  • Z变换 3大核心定理应用:从拉氏变换到离散系统建模的5个关键步骤
  • PIC32微控制器驱动蜂鸣器实现声音反馈方案
  • 抖音直播数据采集终极指南:5分钟实现实时弹幕抓取与分析
  • 门店好评目标制定模型:竞对增量 + 自身完成量 + 转化约束
  • MCreator:无需编程基础,5步创建你的第一个Minecraft模组 [特殊字符]