news 2026/6/21 19:20:49

在Mybatis中PageHelper 的分页作用只对 startPage() 之后、且在同一个线程中执行的「下一个 MyBatis 查询方法」生效

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在Mybatis中PageHelper 的分页作用只对 startPage() 之后、且在同一个线程中执行的「下一个 MyBatis 查询方法」生效

在测试分页插件的查询功能时,我发现:

@Test public void testPageHelperTest() { try { InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = sqlSessionFactory.openSession(true); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Page<Object> pages = PageHelper.startPage(2, 5); System.out.println(pages); } catch (IOException e) { throw new RuntimeException(e); } } }

以上代码输出:

Page{count=true, pageNum=2, pageSize=5, startRow=5, endRow=10, total=0, pages=0, reasonable=null, pageSizeZero=null}[]

我就不明白为什么这里会什么数据都没有

@Test public void testPageHelperTest() { try { InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = sqlSessionFactory.openSession(true); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Page<Object> pages = PageHelper.startPage(2, 5); List<User> users = mapper.selectByExample(null); System.out.println(pages); } catch (IOException e) { throw new RuntimeException(e); } } }

以上代码输出:
Page{count=true, pageNum=2, pageSize=5, startRow=5, endRow=10, total=15, pages=3, reasonable=false, pageSizeZero=false}[User{id=13, name=‘张三’, age=23, sex=‘男’, email=‘123@qq.com’, password=‘123456’, departmentid=2}, User{id=14, name=‘张三’, age=21, sex=‘男’, email=‘222@qq.com’, password=‘123456’, departmentid=3}, User{id=15, name=‘张三’, age=23, sex=‘男’, email=‘123@qq.com’, password=‘123456’, departmentid=1}, User{id=16, name=‘张三’, age=23, sex=‘男’, email=‘123@qq.com’, password=‘123456’, departmentid=2}, User{id=17, name=‘张三’, age=21, sex=‘男’, email=‘222@qq.com’, password=‘123456’, departmentid=3}]

我发现:要有

List<User> users = mapper.selectByExample(null);

才能正常输出pages的内容

List<User> users = mapper.selectByExample(null);

必须在

Page<Object> pages = PageHelper.startPage(2, 5);

后面才可以正确输出内容,如果

List<User> users = mapper.selectByExample(null);

Page<Object> pages = PageHelper.startPage(2, 5);

前面,任然会输出:

Page{count=true, pageNum=2, pageSize=5, startRow=5, endRow=10, total=0, pages=0, reasonable=null, pageSizeZero=null}[]

这是因为:

PageHelper 的分页作用只对startPage()之后、且在同一个线程中执行的「下一个 MyBatis 查询方法」生效

  1. PageHelper.startPage(...)必须写在查询语句之前
  2. 中间不能有其他 MyBatis 查询(尤其是会触发 SQL 执行的操作)
  3. 也不能在startPage()之前调用查询——因为那时 PageHelper 还未设置分页上下文
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 12:28:32

AI智能实体侦测服务缓存优化:Redis加速重复文本识别请求

AI智能实体侦测服务缓存优化&#xff1a;Redis加速重复文本识别请求 1. 引言&#xff1a;AI 智能实体侦测服务的性能挑战 随着自然语言处理技术在信息抽取领域的广泛应用&#xff0c;命名实体识别&#xff08;NER&#xff09; 已成为内容分析、舆情监控、知识图谱构建等场景的…

作者头像 李华
网站建设 2026/6/19 1:58:05

3步搞定AI智能实体侦测部署:RaNER模型快速上手实操手册

3步搞定AI智能实体侦测部署&#xff1a;RaNER模型快速上手实操手册 1. 引言&#xff1a;为什么需要AI智能实体侦测&#xff1f; 在信息爆炸的时代&#xff0c;非结构化文本数据&#xff08;如新闻、社交媒体、文档&#xff09;占据了企业数据总量的80%以上。如何从这些杂乱无…

作者头像 李华
网站建设 2026/6/15 3:26:09

Qwen3-VL内容创作神器:2块钱激发全天灵感

Qwen3-VL内容创作神器&#xff1a;2块钱激发全天灵感 1. 编剧的AI助手&#xff1a;当创作遇上技术瓶颈 作为一名编剧&#xff0c;你是否经常遇到这样的困境&#xff1a;盯着空白的文档发呆&#xff0c;脑海中的创意像被锁在迷雾中&#xff0c;明明有场景画面却无法转化为流畅…

作者头像 李华
网站建设 2026/6/20 20:29:09

基于单片机的智能录音笔的设计(源码+万字报告+讲解)(支持资料、图片参考_相关定制)

、摘 要 随着电子技术的快速发展&#xff0c;数字记录笔越来越受欢迎。本文对记录笔的不同设计方案进行了比较和分析&#xff0c;并选择STC90C52微控制器设计了一种数字记录笔。本文提出了一种基于STC90C52微控制器和ISD4004语音芯片的多功能录音笔解决方案。首先&#xff0c;…

作者头像 李华
网站建设 2026/6/10 18:02:05

美版“美团”DoorDash:如何通过功能测试提高代码覆盖率的

在这篇文章中&#xff0c;我们介绍了一种功能测试方法&#xff0c;该方法不需要任何手动设置&#xff0c;并且可以像单元测试一样在本地或在持续集成 (CI) 管道中运行。具体来说&#xff0c;该方法执行以下操作&#xff1a; 有助于在本地开发过程中捕获和重现更多的错误&#…

作者头像 李华
网站建设 2026/6/9 23:17:07

AI智能实体侦测服务节省人力:批量处理万条文本部署案例

AI智能实体侦测服务节省人力&#xff1a;批量处理万条文本部署案例 1. 引言&#xff1a;AI 智能实体侦测服务的业务价值 在信息爆炸的时代&#xff0c;企业每天需要处理海量非结构化文本数据——新闻稿、社交媒体评论、客户反馈、合同文档等。传统的人工标注方式不仅耗时耗力…

作者头像 李华