mybatis 有几种分页方式?


MyBatis分页分为物理分页和逻辑分页。物理分页利用数据库分页语句如MySQL的LIMIT,通过PageHelper插件或手动编写SQL实现,效率高;逻辑分页将数据全查出后在内存中分页,实现简单但性能低,易导致OOM。数据量大时应选物理分页,数据量小可选逻辑分页,PageHelper可简化物理分页并适配多数据库。

mybatis 有几种分页方式?

MyBatis 的分页方式主要分为两种:物理分页逻辑分页。物理分页依赖数据库自身的分页能力,效率较高;逻辑分页则是将所有数据查询出来,然后在内存中进行分页,效率相对较低。

物理分页和逻辑分页。

MyBatis 物理分页如何实现?

物理分页的核心在于利用数据库提供的分页 SQL 语句。不同的数据库,分页 SQL 的写法也不同,例如 MySQL 使用 LIMIT,Oracle 使用 ROWNUM,PostgreSQL 使用 LIMIT...OFFSET。MyBatis 通过配置 PageHelper 插件,或者手动编写 Mapper XML 文件来实现物理分页。

使用 PageHelper 插件:

PageHelper 是一个非常流行的 MyBatis 分页插件,它简化了物理分页的实现。

  1. 引入 PageHelper 依赖:pom.xml 文件中添加 PageHelper 的依赖。

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>最新版本</version>
    </dependency>
  2. 配置 PageHelper:application.propertiesapplication.yml 文件中配置 PageHelper。

    pagehelper.helper-dialect=mysql
    pagehelper.reasonable=true
    pagehelper.support-methods-arguments=true
    pagehelper.params=count=countSql
    pagehelper.auto-runtime-dialect=true
    • helper-dialect:指定数据库类型。
    • reasonable:分页参数合理化,当pageNum总页数会查询最后一页。
    • support-methods-arguments:支持通过 Mapper 接口参数来传递分页参数。
    • params:为了支持 count=countSql 这种写法。
    • auto-runtime-dialect:自动判断使用何种分页。
  3. 使用 PageHelper 进行分页查询: 在 Service 层调用 Mapper 接口之前,使用 PageHelper.startPage(pageNum, pageSize) 方法设置分页参数。

    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        public PageInfo<User> getUsersByPage(int pageNum, int pageSize) {
            PageHelper.startPage(pageNum, pageSize);
            List<User> userList = userMapper.getAllUsers();
            return new PageInfo<>(userList);
        }
    }

    PageHelper.startPage() 方法会拦截接下来的 SQL 查询,自动添加分页 SQL 语句。PageInfo 对象包含了分页信息,例如总记录数、总页数等。

手动编写 Mapper XML 文件:

如果不使用 PageHelper 插件,就需要手动编写 Mapper XML 文件,添加分页 SQL 语句。

  1. Mapper 接口: 定义 Mapper 接口方法,传递分页参数。

    追梦flash企业网站管理模板A系列11.0 追梦flash企业网站管理模板A系列11.0

    追梦A系列(11.0版本,以下11.0均简称为A)是针对企业网站定制设计的,模板采用全新AS3.0代码编辑,拥有更快的运行和加载速度,A系列模板主要针对图片展示,拥有简洁大气展示效果,并且可以自由扩展图片分类,同时还拥有三个独立页面介绍栏目,一个新闻栏目,一个服务介绍栏目,一个幻灯片展示和flv视频播放栏目。A系列模板对一些加载效果进行了修改,包括背景的拉伸模式以及标题的展示方式等都进行了调整,同

    追梦flash企业网站管理模板A系列11.0 0 查看详情 追梦flash企业网站管理模板A系列11.0
    public interface UserMapper {
        List<User> getUsersByPage(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
    }
  2. Mapper XML 文件: 编写 Mapper XML 文件,使用数据库特定的分页 SQL 语句。以 MySQL 为例:

    <select id="getUsersByPage" resultType="User">
        SELECT *
        FROM user
        LIMIT #{pageNum}, #{pageSize}
    </select>

    这种方式需要根据不同的数据库编写不同的分页 SQL 语句,比较繁琐。需要注意的是,这里的 #{pageNum} 代表的是起始位置,所以需要进行计算:#{pageNum * pageSize}

MyBatis 逻辑分页的优缺点是什么?

逻辑分页的实现相对简单,就是将所有数据查询出来,然后在内存中进行分页。

实现方式:

  1. Mapper 接口: 定义 Mapper 接口方法,查询所有数据。

    public interface UserMapper {
        List<User> getAllUsers();
    }
  2. Service 层: 在 Service 层进行分页处理。

    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        public List<User> getUsersByPage(int pageNum, int pageSize) {
            List<User> userList = userMapper.getAllUsers();
            int startIndex = (pageNum - 1) * pageSize;
            int endIndex = Math.min(startIndex + pageSize, userList.size());
            return userList.subList(startIndex, endIndex);
        }
    }

优点:

  • 实现简单,不需要依赖数据库的分页能力。
  • 适用于数据量较小的场景。

缺点:

  • 性能较差,需要将所有数据查询出来,占用大量内存。
  • 不适用于数据量大的场景。
  • 如果数据量非常大,可能会导致 OOM (OutOfMemoryError)。

如何选择合适的分页方式?

选择合适的分页方式需要根据具体的业务场景进行考虑。

  • 数据量小: 如果数据量较小,可以选择逻辑分页,实现简单。
  • 数据量大: 如果数据量较大,必须选择物理分页,提高查询效率。
  • 数据库类型: 如果使用不同的数据库,需要考虑数据库的分页 SQL 语句是否一致。如果数据库类型不一致,建议使用 PageHelper 插件,它可以自动适配不同的数据库。
  • 性能要求: 如果对性能要求较高,建议使用物理分页,并对 SQL 语句进行优化。

总的来说,物理分页是更常用的分页方式,特别是在数据量大的情况下。PageHelper 插件可以简化物理分页的实现,提高开发效率。在选择分页方式时,需要综合考虑数据量、数据库类型、性能要求等因素,选择最适合自己的方式。

以上就是mybatis 有几种分页方式?的详细内容,更多请关注其它相关文章!


# mybatis  # 分页  # 几种  # 量大  # 追梦  # 企业网站  # red  # app  # github  # git  # oracle  # mysql  # 天元区营销推广中心主任  # 网站建设加域名  # 青岛网站建设好处  # 网站广告推广平台排行  # 山东营销网站推广哪个好  # 东阳网站建设工作  # 营销策划全网推广怎么做  # 外贸seo博客外链案例  # n-seo绝地求生  # 汕尾谷歌seo  # 组成部分  # 较小  # 数据查询  # 较高  # 的是 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 顺丰快递在线查询系统 顺丰快递官方查单入口  139邮箱登录入口官网 139邮箱登录入口官网网址  银信通自动开通原因揭秘  如何在vscode中关闭it环境  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  《海贝音乐》均衡器设置方法  Keras中Convolution2D层及其核心辅助层详解  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩  HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单  德邦物流在线查询系统 德邦快递货物运输追踪  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践  解决VS Code中Python版本冲突与输出异常的指南  PySimpleGUI中实现键盘按键与按钮事件绑定教程  蛙漫2(台版)正版官网 2025免费网页版分享  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  火柴人战争网页版在线玩  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  优化Google Charts Gauge:在数据库无数据时显示默认值  在Flask应用中安全高效地更新SQLAlchemy用户数据  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明  mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  J*aScript类型数组_TypedArray使用  Coolpad5890 ROM刷机包  解决jQuery多计算器输入字段冲突的教程  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化  微信如何设置字体大小_微信字体设置的阅读舒适  DeepSeek超全面指南:入门必看  天堂漫画网页版在线阅读 天堂漫画手机版入口  tiktok国际版入口_tiktok官网网页版链接  Teambition网盘如何共享文件  智慧职教mooc平台登录网址 智慧职教mooc官网直达  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  4399造梦西游3无敌版_4399游戏入口 

 2025-11-30

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.