MyBatis分页及分页插件使用

article/2025/11/4 4:24:54

7.分页

7.1 作用

  • 减少数据处理量,一次数据量太大了对数据库和网络压力太大
SELECT * FROM school.`user` LIMIT startIndex,pageSize
SELECT * FROM school.`user` LIMIT 2  -- 0,2
SELECT * FROM school.`user` LIMIT 2,2 -- startIndex从0开始
  • 使用mybatis实现分页步骤,核心sql

  • 接口

public List<User> selectUserMap(Map<String,Integer> map);
  • mapper.xml
<select id="selectUserMap"  parameterType="map" resultMap="userMap">select * from user limit #{startIndex},#{pageSize}
</select>
  • 测试
@Test
public void testMybatis02(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);HashMap<String, Integer> map = new HashMap<>();map.put("startIndex",1);map.put("pageSize",2);List<User> users = mapper.selectUserMap(map);System.out.println(users.size());users.forEach(val->{logger.debug(val.toString());});sqlSession.close();
}

7.2 pagehelper分页插件使用

  • PageHelper首先将前端传递的参数保存到page这个对象中,使用PageHelper.startPage在当前线程上下文中设置一个ThreadLocal变量,将page的副本存放入ThreadLoacl中,在 ThreadLocal中设置了分页参数,接着查询执行的时候,利用了mybatis提供的拦截器,取得ThreadLocal的值,获取当前线程中的分页参数,重新拼装分页SQL,完成分页,查询结束后在 finally 语句中清除ThreadLocal中的查询参数,这样保证分页的时候,sql和参数互不影响,
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
/**
* 设置 Page 参数
*
* @param page
*/
protected static void setLocalPage(Page page) {LOCAL_PAGE.set(page);
}/*** 开始分页** @param pageNum      页码* @param pageSize     每页显示数量* @param count        是否进行count查询* @param reasonable   分页合理化,null时用默认配置* @param pageSizeZero true且pageSize=0时返回全部结果,false时分页,null时用默认配置*/public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {Page<E> page = new Page<E>(pageNum, pageSize, count);page.setReasonable(reasonable);page.setPageSizeZero(pageSizeZero);//当已经执行过orderBy的时候Page<E> oldPage = getLocalPage();if (oldPage != null && oldPage.isOrderByOnly()) {page.setOrderBy(oldPage.getOrderBy());}setLocalPage(page);return page;}
  • 倒入jar依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.0</version>
</dependency>
  • 在mybatis-config.xml核心配置文件中配置plugins

  • 注意mybatis-config.xml各元素顺序

The content of element type “configuration” must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)

<!--分页插件-->
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
  • 在接口interface UserMapper编写方法,注意不传分页参数(物理分页)
List<User> selectUserPagehelper();
  • 在UserMapper.xml编写sql
<select id="selectUserPagehelper" resultType="com.zk.pojo.User">select * from user
</select>
  • 调用测试
@Test
public void testMybatis04(){SqlSession sqlSession = MybatisUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);/*** 开始分页** @param pageNum  页码* @param pageSize 每页显示数量*/PageHelper.startPage(2,2);List<User> users = mapper.selectUserPagehelper();PageInfo<User> userPageInfo = new PageInfo<>(users);//return userPageInfo; System.out.println(userPageInfo.getPageSize());System.out.println(users.size());users.forEach(val->{logger.debug(val.toString());});sqlSession.close();
}
  • 结果
    在这里插入图片描述

7.3 RowBounds分页插件使用

  • 不是用sql分页实现
  • 实现接口
List<User> selectUserRowBounds();
  • 在UserMapper.xml编写sql
<select id="selectUserPagehelper" resultType="com.zk.pojo.User">select * from user
</select>
  • 调用
@Test
public void testMybatis05(){SqlSession sqlSession = MybatisUtil.getSqlSession();//RowBounds创建RowBounds rowBounds = new RowBounds(1,2);//java代码层面分页List<User> user = sqlSession.selectList("com.zk.dao.UserMapper.selectUserRowBounds",null,rowBounds);System.out.println(user.size());user.forEach(val->{logger.debug(val.toString());});sqlSession.close();
}
  • 结果
    在这里插入图片描述

本专栏下一篇:MyBatis注解开发


http://chatgpt.dhexx.cn/article/t14Gabaf.shtml

相关文章

mybatis-plus 分页插件

目录 1 前言 2 配置分页插件 2.1 selectPage()测试 2.2 自定义分页功能 1 前言 大家之前肯定都用过PageHelper来进行分页&#xff0c;其实mybatisplus中也提供了一个分页插件PaginationInnerInterceptor&#xff0c;其实分页的本质就是内部封装了一个拦截器&#xff0c;对…

springboot使用分页插件

业务逻辑&#xff1a;我想要实现对必备材料信息列表的分页展示&#xff0c;包括查询后的信息也要分页展示 效果图 解决思路&#xff1a; 首先实体类用来接收数据&#xff0c;有一个Dao类用来进行sql查询&#xff0c;有一个servcie(需要传pageNum,PageSiz)&#xff0c;serviceIm…

Mybatis-分页插件

目录 引入介绍 回顾MySQL的limit实现简易分页 问题的产生与解决 分页插件实现步骤 实例演示 分页插件相关参数 实例演示 引入介绍 分页可以将很多条结果进行分页显示如果当前在第一页&#xff0c;则没有上一页如果当前在最后一页&#xff0c;则没有下一页需要明确当前是第几页…

BootStrap分页插件

BootStrap分页插件 官网 官方网址&#xff1a;https://labs.pontikis.net/bs_pagination/docs/ 怎么使用 引入插件所需要的资源文件 <link href"jquery/bootstrap_3.3.0/css/bootstrap.min.css" type"text/css" rel"stylesheet" /> &l…

MyBatis分页插件

目录 分页插件 Mybatis插件典型适用场景 实现思考 第一个问题 第二个问题 自定义分页插件 分页插件使用 添加pom依赖 插件注册 调用 代理和拦截是怎么实现的 PageHelper 原理 分页插件 MyBatis 通过提供插件机制&#xff0c;让我们可以根据自己的需要去增强MyBati…

分页利器——pageHelper分页插件

pageHelper插件在分页上有哪些优势&#xff1f; 分页插件给我们封装了很多参数&#xff0c;不用我们再去硬性编码获取各种参数。 pageHelper封装参数如下&#xff0c;这个参数封装在com.github.pagehelper.page中&#xff1a; count&#xff1a;是否进行count查询&#xff0c;…

分页插件--PageHelper

mybatis的分页查询可以通过PageHelper插件实现 在数据库中我们使用分页查询的sql语句为&#xff1a; select * from 表名 [where 条件] limit (page-1)*pageSize, pageSize; page: 当前页码 pageSize: 每页显示的条数。但是当我们使用PageHelper插件后页码什么的都不用我们计算…

分页插件

10-分页插件-分页插件的介绍 分页可以将很多条结果进行分页显示。如果当前在第一页&#xff0c;则没有上一页。如果当前在最后一页&#xff0c;则没有下一页。需要明确当前是第几页&#xff0c;这一页中显示多少条结果。MyBatis分页插件总结 在企业级开发中&#xff0c;分页也是…

MyBatis-Plus 插件篇 >分页插件

目标&#xff1a; 懂得使用 Mybatis-Plus 进行分页查询 实现步骤&#xff1a; 1、编写分页插件 2、测试分页功能 一、分页插件PaginationInnerInterceptor MyBatis-Plus 的分页实现还是使用的动态拼接Limit分页 二、测试用例 1、编写分页插件 /*分页插件*/Beanpublic Pagi…

分页插件 - PageHelper的介绍和使用

PageHelper介绍 PageHelper是国内非常优秀的一款开源的mybatis分页插件&#xff0c;它支持基本主流与常用的数据库&#xff0c;例如mysql、 oracle、mariaDB、DB2、SQLite、Hsqldb等。 PageHelper使用 引入分页插件有下面两种方式&#xff1a; ① 引入jar包&#xff0c;以下…

[一起学习pytorch吧]之torch.sign函数

Hello&#xff0c;大家好&#xff01;今天为大家讲解以下pytorch的sign函数。 torch.sign(input, outNone) → Tensor 该函数的作用就是输出input通过sign函数后的张量&#xff0c;其中sign函数就是符号函数&#xff0c;如下图所示。 例子&#xff1a; >>> a torch…

Python】Numpy库之符号函数sign()的介绍及用法

1、sign()函数功能介绍 sign()是Python的Numpy中的取数字符号&#xff08;数字前的正负号&#xff09;的函数。 2、sign()函数用法代码演示 import numpy as np dataArr [-0.2, -1.1, 0, 2.3, 4.5, 0.0] print(“输入数据为&#xff1a;”) print(dataArr) signResult np.sig…

Oracle Decode 函数用法 Count函数条件统计 Sign 函数用法 Case When 函数

Oracle Decode 函数用法 Count函数条件统计 Sign 函数用法 Case When 函数 一、概述 1、本文系统的整理了&#xff0c;Oracle中常见的几个函数用法&#xff0c;都是涉及到条件判断分支类的相关函数&#xff0c;分别是 CASE ..WHEN ; DECODE , SIGN 。 2、假设有一张表Student &…

matlab中sign函数的使用(提取符号)

仅用于记录自己学习过程中遇到的函数 matlab中sign函数的使用&#xff0c;提取符号 一、语法 Y sign(x) 返回与 x 大小相同的数组 Y&#xff0c;其中 Y 的每个元素是&#xff1a; 1&#xff0c;前提是 x 的对应元素大于 0。 0&#xff0c;前提是 x 的对应元素等于 0。 -1&am…

R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1

R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 目录 R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 R 语言特点 R语言使用符号函数计算数据的正负特性、sign函数计算数据的正负符号返回0、1、-1 R可以在CR…

c语言中sign的用法,Excel教程中sign函数用法和实例详解

第一&#xff0c;sign函数用法说明 excel教程中sign函数用于返回数字的符号。正数为1&#xff0c;零为0&#xff0c;负数为-1。 sign函数语法&#xff1a;SIGN(number) SIGN符号函数(一般用sign(x)表示)是很有用的一类函数&#xff0c;其功能是取某个数的符号(正负零)&#xff…

R语言sign函数判断数值为正数或者负数实战

R语言sign函数判断数值为正数或者负数实战 目录 R语言sign函数判断数值为正数或者负数实战 #基本语法 #正负数判断 #基本语法 sign(5) # Basic R syntax of sign function #正负数判断 sign(-2:5) # Apply sign function # -1 -1 0 1 1 1 1 1 参…

matlab2c使用c++实现matlab函数系列教程-sign函数

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; matlab2c动态链接库下载 matlab库函数大全 matlab2c基础教程 matlab2c开发全解教程 matlab2c调用方法&#xff1a; 1、下载动态链接库 2、将Matlab2c.dll拷贝到exe同目录下 3、将Matlab2c.h、Matlab2c.lib放…

matlab中sign函数用法

sign本身就有就有符号标志之意.故sign为符号函数&#xff01; sign(整数)1; sign(负数)-1; sign&#xff08;零&#xff09;0&#xff1b; matlab运行例子&#xff1a;

mysql中sign函数_Oracle中sign函数和decode函数的使用

在逻辑编程中&#xff0c;经常用到If ndash; Then ndash;Else 进行逻辑判断。在DECODE的语法中&#xff0c;实际上就是这样的逻辑处理过程。它的语法 1.比较大小函数SIGN sign(x)或者Sign(x)叫做符号函数&#xff0c;其功能是取某个数的符号(正或负)&#xff1a; 当x>0&…