Mybatis使用pageHelper分页插件原理

介绍一下 PageHelper 实现分页原理 PageHelper 提供了丰富的配置选项和自定义功能,如是否支持带有“for update”的查询语句、是否支持嵌套查询等。• 开发者可以通过配置文件或注解等方式来灵活配置和使用 PageHelper 阅读详情


首先在Mybatis的配置文件 SqlMapConfig.xml中配置PageHelper插件

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

            "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

      <!-- 配置分页插件 -->

      <plugins>

            <plugininterceptor="com.github.pagehelper.PageHelper">

                  <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->       

           <propertyname="dialect"value="mysql"/>

            </plugin>

      </plugins>

</configuration>

pageHelper是如何在mybatis中工作呢,是通过mybatis的pulgin实现了Interceptor接口


使用原理:

pageHelper会使用ThreadLocal获取到同一线程中的变量信息,各个线程之间的Threadlocal不会相互干扰,也就是Thread1中的ThreadLocal1之后获取到Tread1中的变量的信息,不会获取到Thread2中的信息
所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现,不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句
所以,PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句

1定义一个 分页的类

public class Page {
    private int startPage;
    private int pageSize;
    public int getStartPage() {

        return startPage;
    }
    public void setStartPage(int startPage) {
        this.startPage = startPage;
    }
    public int getPageSize() {

        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public Page(int startPage, int pageSize) {
        super();
        this.startPage = startPage;
        this.pageSize = pageSize;
    }
    public Page() {
        super();
        // TODO Auto-generated constructor stub

    }

}
2模拟 PageHelper

public class PageHelper {
    /**
     * 其实 PageHelper 的实现靠的就是这个变量,
     * 它的里面可以存储的东西,在真正需要计算分页的时候,可以随时取出来
     */
    private static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();

    public static void startPage(int startPage, int pageSize) {
        Page page  = new Page();
        page.setStartPage(startPage);
        page.setPageSize(pageSize);
        LOCAL_PAGE.set(page);
    }

    public static Page getPage() {
        return LOCAL_PAGE.get();
    } 
}</span>
3.测试分页原理
public class TestPage {
    public static void main(String[] args) {
        int startPage = 1;
        int pageSize =10;
        PageHelper.startPage(startPage, pageSize);
        Page page = PageHelper.getPage();
        System.out.println(page.getStartPage()  + " : " + page.getPageSize());
    }
}



MyBatis拦截器分页原理PageHelper分页插件教学 闲来无事,特地整理了一下MyBatis拦截器实现分页原理。地球人应该都知道要利用JDBC对数据库进行操作,就需要一个statement对象,MyBatis也是如此。MyBatis在执行sql语句前会产生一个包含sql语句的Statement对象,而且对应的sql语句是在Statement之前产生的,所以我们就可以在MyBatis生成Statement之前对这个sql下手,分页本质上是sql lim 阅读详情

相关推荐

MyBatis分页插件PageHelper原理与实战指南

数据库分页是Web开发中的基础需求,特别是在处理大数据量查询时尤为重要。分页的核心原理是通过SQL改写实现数据分段获取,既能提升查询效率,又能减轻服务器内存压力。MyBatis作为Java生态中广泛使用的ORM框架,其分页插件PageHelper通过拦截器机制自动改写SQL,支持MySQL、Oracle等12种数据库方言。该插件采用ThreadLocal存储分页参数,保证了线程安全性,同时提供PageInfo对象封装分页结果,极大简化了开发工作。在电商商品列表、后台管理系统等典型应用场景中,PageHelp

weixin_34242819的博客 326

Mybatis PageHelper原理

1.PageHelper原理 PageHelpermybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句, 最终实现分页查询功能。 在调用dao的service方法中设置分页参数:PageHelper.startPage(page, size),分页参数会设置在ThreadLocal中PageHelpermybatis执行sql前进行拦截,从...

qq_37457564的博客 2152

MyBatis分页插件(PageHelper)工作原理

  数据分页功能是我们软件系统中必备的功能,在持久层使用mybatis的情况下,pageHelper来实现后台分页则是我们常用的一个选择,所以本文专门类介绍下。 PageHelper原理 相关依赖 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifac...

波波烤鸭的博客 12万+

分页插件PageHelper工作原理

数据分页功能是我们软件系统中必备的功能,在持久层使用mybatis的情况下,PageHelper来实现后台分页则是我们常用的一个选择,所以本文专门来介绍下。 1. 原理概述 PageHelperMyBatis的一个插件,内部实现了一个PageInterceptor拦截器。Mybatis会加载这个拦截器到拦截器链中。在我们使用过程中先使用PageHelper.startPage这样的语句在当前...

傅红雪的专栏 2万+

Mybatis分页插件 - PageHelper原理讲解

错误一: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type...

立志欲坚不欲锐,成功在久不在速度 4155

mybatis分页插件PageHelper使用原理分析

目录PageHelper介绍PageHelper使用PageHelper原理PageHelper踩坑 PageHelper介绍 PageHelper是基于mybatis提供的一个第三方分页插件,在基于mybatis的项目中使用非常方便,详细可查看官网:https://pagehelper.github.io/ PageHelper使用 先简单介绍下使用: maven依赖 <dependency> <groupId>com.github.pagehelper</group

qq_31086797的博客 1万+

MyBatisPageHelper分页插件使用与相关原理分析

本文详细介绍了MyBatis分页插件PageHelper使用方法和实现原理。主要内容包括:1) 在MyBatis、SpringBoot和SpringMVC三种框架中的集成方式,包括依赖引入、配置参数和使用示例;2) 插件核心实现原理,通过拦截器对SQL进行改写,包括统计总数和分页处理;3) 常见问题处理,如对查询结果二次处理导致分页失效等。文章还分析了PageInterceptor、AbstractHelperDialect等关键类的实现细节,帮助开发者深入理解分页插件的运行机制。

小七的博客 1788

Mybatis分页插件PageHelper工作原理

PageHelper前言需要的依赖配置插件加载过程PageHelper定义的拦截信息ExecutorPageHelper实现分页的具体过程startPageselectList 前言 数据分页功能是软件系统中必备的功能,在持久层使用mybatis的情况下,pageHelper来实现后台分页则是我们常用的一个选择,所以本文专门介绍下。 需要的依赖 <dependency> &lt...

JustinNeil的博客 5535

mybatis分页插件com.github.pagehelper.PageHelper原理

在判断是否需要分页时,关键在于从ThreadLocal中取出分页信息,没有则表示无需分页。在PageHelper中的skip方法中判断: public class PageHelper extends PageMethod implements Dialect { private PageParams pageParams; private PageAutoDialect autoDialect; //判断是否需要分页 @Override public bool

chuixue24的博客 4142

Mybatis分页插件PageHelper原理

前段时间甲同学遇到了在mybatis中遇到了一个神奇的问题,PageHelper会自动加上了limit ??导致查询数据不准

xiaoxsen的博客 1335

秒懂MyBatis分页插件PageHelper基于ThreadLocal的实现原理分析

你或许用过mybatis,但你未必用过github上的一个基于mybatis分页插件PageHelper。项目地址: https://github.com/pagehelper/Mybatis-PageHelper 小用了一下,感觉还是蛮不错的。使用MyBatis分页插件PageHelper非常简单,代码如下: //使用方法可参考https://github.com/pagehelpe...

凡是过往,皆为序章 3344

Mybatis插件原理PageHelper结合实战分页插件

今天和大家分享下mybatis的一个分页插件PageHelper,在讲解PageHelper之前我们需要先了解下mybatis插件原理PageHelper 的官方网站:https://github.com/pagehelper/Mybatis-PageHelper 一、Plugin接口 mybatis定义了一个插件接口org.apache.

fengqilove520的专栏 3882

Mybatis第三方PageHelper分页插件原理

欢迎关注公号:BiggerBoy,看更多文章 原文链接:Mybatis第三方PageHelper插件分页原理面试高频问题~https://mp.weixin.qq.com/s?__biz=MzUxNTQyOTIxNA==&mid=2247485158&idx=1&sn=e5ef38a44436b9bf263f68d57fe05b5f&chksm=f9b780d7cec009c194e68f1ddec29939809d519f722eae73406f06d18bb0986eb

ibigboy 663

Mybatis分页插件PageHelper使用原理解析

文章全面介绍mybatis分页插件的基本概念、使用方法、以及为何我们需要使用它。我们将通过五个部分来详细讲解,包括“是什么”、“如何使用”、“为什么要用它”、“原理”和“总结”。

程序员Forlan的博客 2347

掌握MyBatis插件原理轻松写出自己的PageHelper分页插件

前言 提到插件,相信大家都知道,插件的存在主要是用来改变或者增强原有的功能,MyBatis中也一样。 然而如果我们对MyBatis的工作原理不是很清楚的话,最好不要轻易使用插件,否则的话如果因为使用插件导致了底层工作逻辑被改变,很可能会出现很多意料之外的问题。。整理了100+个Java项目视频+源码+笔记 本文主要会介绍MyBatis插件使用及其实现原理,相信读完本文,我们也可以写出自己的PageHelper分页插件了。 MyBatis插件是如何实现的 在MyBatis插件式通过拦截器来实现的,那么既

weixin_51439578的博客 244

pagehelper原理_MyBatis插件原理分页插件PageHelper

使用方法1.添加Maven依赖com.github.pagehelperpagehelper5.0.02.在 Mybatis-Config.xml中配置PageHelper插件参数"com.github.pagehelper.PageInterceptor">"offsetAsPageNum"value="true"/>"rowBoundsWithCount"value=...

weixin_39624816的博客 184
上一篇: Java集合---ConcurrentHashMap原理分析
下一篇: HashSet和HashMap的关系
jaryle
博客等级 码龄17年 312粉丝 325原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值