逻辑翻页与物理翻页的区别
逻辑分页-假分页:将数据全部加载到内存,根据rowBound里面的偏移量,和条数,将偏移量之前的都去掉,只去从偏移量开始后指定数量的那一部分;
物理分页- 真分页:将分页信息硬编码到sql语句中,到库里直接查询需要的那部分数据;

逻辑翻页的支持 --RowBounds
MyBatis 里面有一个逻辑分页对象 RowBounds,里面主要有两个属性,offset 和
limit(从第几条开始,查询多少条)
我们可以在 Mapper 接口的方法上加上这个参数,不需要修改 xml 里面的 SQL 语句:

public List<Blog> selectBlogList(RowBounds rowBounds);

调用接口时:

int start = 10; // offset, 从第几行开始查询
int pageSize = 5; // limit, 查询多少条RowBounds rb = new RowBounds(start, pageSize);
List<Blog> list = mapper.selectBlogList(rb);for(Blog b :list){System.out.println(b);}

它的底层其实是对 ResultSet 的处理。它会舍弃掉前面 offset 条数据,然后再取剩下的数据的 limit 条,如果数据量大的时候,这种翻页方式效率非常低,需要将所有数据都加载到内存中再考虑翻页的start和end,所以我们要用到物理翻页。

物理翻页的几种实现方式
物理翻页是真正的翻页,它是通过数据库支持的语句来翻页。
第一种简单的办法就是传入参数(或者包装一个 page 对象),在 SQL 语句中翻页。

<select id="selectBlogPage" parameterType="map" resultMap="BaseResultMap">select * from blog limit #{curIndex} , #{pageSize}
</select>

第一个问题是我们要在 Java 代码里面去计算起止序号;第二个问题是:每个需要翻页的 Statement 都要编写 limit 语句,会造成 Mapper 映射器里面很多代码冗余。
那我们就需要一种通用的方式,不需要去修改配置的任何一条 SQL 语句,只要在我们需要翻页的地方封装一下翻页对象就可以了。
我们最常用的做法就是使用翻页的插件,这个是基于 MyBatis 的拦截器实现的,比如 PageHelper。

// pageSize 每一页几条
PageHelper.startPage(pn, 10);
List<Employee> emps = employeeService.getAll();
// navigatePages 导航页码数
PageInfo page = new PageInfo(emps, 10);
return Msg.success().add("pageInfo", page);

PageHelper 是通过 MyBatis 的拦截器实现的,插件的具体原理我们后面的课再分析。简单地来说,它会根据 PageHelper 的参数,改写我们的 SQL 语句。比如 MySQL会生成 limit 语句,Oracle 会生成 rownum 语句,SQL Server 会生成 top 语句。

抖音短视频APP开发逻辑翻页与物理翻页相关推荐

  1. IOS抖音短视频APP开发关于扫描二维码,并根据文本生成二维码

    IOS抖音短视频APP开发关于扫描二维码,(根据光线强弱显示隐藏闪光灯)并根据文本生成二维码. WeakSelf; //IOS抖音短视频APP开发构建扫描样式视图 _scanView = [[WSLS ...

  2. 抖音短视频APP开发如何生成二维码?

    授权转载自云豹网络科技的CSDN博客 原文链接:https://blog.csdn.net/yb1314111/article/details/101283985 IOS抖音短视频APP开发关于扫描二 ...

  3. 抖音短视频APP开发通过三种方式绘制图片

    (一)ImageView绘制图片 (1)将图片分别放入mipmap-hdpi.assets (2)布局文件: <?xml version="1.0" encoding=&qu ...

  4. 抖音短视频APP开发进度条(ProgressBar)的功能与用法

    在layout下的activity_main中: <?xml version="1.0" encoding="utf-8"?> <Linear ...

  5. 如何开发仿抖音短视频APP源码?

    如何开发仿抖音短视频APP源码? 流程列表 开发一个短视频最主要的流程分为 3 个,下面我将分步教你实现这 3 个流程下的各个功能点,功能点 API 可按需调用: 视频拍摄 a.启动拍摄 b.给拍摄添 ...

  6. 原生Java高仿抖音短视频APP双端源码

    简介: 从别的网站199购买的原生Java高仿抖音短视频APP双端源码,免费给大家~ 源码未测试,java开发,上手有难度,小白童鞋请勿瞎捣鼓. 安卓语言是:android stdio 苹果语言是:O ...

  7. shell date 日期格式化_抖音短视频系统开发,日期加减

    let dateTime=new Date(); this.dateFomat是对日期格式化为 yyyy - mm - dd的格式 // 减一天 dateTime = dateTime.setDate ...

  8. 仿抖音短视频APP双端系统源码+带教程/PHP的

    正文: 仿抖音短视频APP双端系统源码+带教程/PHP的. 下方是程序完整标题: 标题上所谓的双端其实就是安卓/IOS都是分别有源码的,这系统是有安装教程的,有兴趣的自行去研究吧. 程序: wwgeg ...

  9. 最新仿抖音短视频APP双端源码+带安装教程/PHP后端

    正文: 最新仿抖音短视频APP双端源码+带安装教程/PHP后端,程序在本文最底部. 下方是程序完整标题: 标题上所谓的双端其实就是安卓/IOS都是分别有源码的,这系统是有安装教程的,有兴趣的自行去研究 ...

最新文章

  1. mac mysql 可视化工具_推荐3款好用的Redis、MySQL和MongoDB可视化管理工具
  2. python中的字符串处理
  3. mysql heartbeat 高可用
  4. php手册最新版本_PHP官方网站及PHP手册
  5. 从KPI到OKR,高阶产品人如何推动业务高速增长
  6. AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im
  7. dqn系列梳理_讲人话系列——DQN初探之2048
  8. Unity 可重复随机数
  9. 装Windows 8 过程中遇到的问题,及解决方案
  10. freenas 蜗牛星际_从“白群晖”到“蜗牛星际”,到底哪种NAS方案适合我?
  11. 相机的介绍--新手入门级介绍
  12. Matlab 中值滤波原理分析
  13. 联想小新电脑摄像头黑屏、检测不到设备、指示灯不亮解决方案
  14. 城镇化率与世界平均水平相当 质量不高问题突出
  15. listview增大条目间距
  16. 实现 3D 时间动画展示效果
  17. Penetration_Testing_POC-About 渗透测试有关的POC、EXP、脚本、提权、小工具等
  18. Android开发:Android studio开发中引用图片资源(图解)
  19. 电视+私人影院+KTV+游戏厅,爽!
  20. 考研高数之无穷级数题型一:判断收敛性、求收敛半径以及收敛域和收敛区间(题目讲解)

热门文章

  1. 如何驱动段码液晶屏?
  2. 使用Folx标签实现自动的资源分类功能
  3. Barsetto百胜图咖啡 办公咖啡界新宠
  4. java 字符串模糊搜索_Java中的模糊字符串搜索库
  5. 服务器软件配置文件,服务器多开软件配置文件
  6. excel中 复制工作表_如何在Excel 2013中轻松移动或复制工作表
  7. 拼多多黄峥:15个月把月GMV做到20亿 他自己也惊呆了
  8. 计算机图形学期末考试嘉应学院,嘉应学院数学系模拟考试试卷一及参考答案
  9. 30天自制操作系统:第十二天 定时器(1)
  10. Java串口编程学习1-环境配置(64位Win7)