您好、欢迎来到现金彩票网!
当前位置:打鱼棋牌游戏平台 > 物理分页 >

PageHelper分页插件源码及原理剖析

发布时间:2019-06-12 17:43 来源:未知 编辑:admin

  PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美。

  原本以为分页插件,应该是很简单的,然而PageHelper比我想象的要复杂许多,它做的很强大,也很彻底,强大到使用者可能并不需要这么多功能,彻底到一参可以两用。但是,我认为,作为分页插件,完成物理分页任务是根本,其它的很多智能并不是必要的,保持它够傻够憨,专业术语叫stupid,简单就是美。

  我们将简单介绍PageHelper的基本使用和配置参数的含义,重点分析PageHelper作为Mybatis分页插件的实现原理。

  PageHelper除了本身的jar包外,它还依赖了一个叫jsqlparser的jar包,使用时,我们不需要单独指定jsqlparser的maven依赖,maven的间接依赖会帮我们引入。

  上面是PageHelper官方给的配置和注释,虽然写的很多,不过确实描述的很明白。

  rowBoundsWithCount:设置为true时,使用RowBounds分页会进行count查询,个人觉得完全没必要,实际开发中,每一个列表分页查询,都配备一个count数量查询即可。

  reasonable:value=true时,pageNum小于1会查询第一页,如果pageNum大于pageSize会查询最后一页 ,个人认为,参数校验在进入Mybatis业务体系之前,就应该完成了,不可能到达Mybatis业务体系内参数还带有非法的值。

  这么一来,我们只需要记住 dialect = mysql 一个参数即可,其实,还有下面几个相关参数可以配置。

  上面这3个智能参数,不到万不得已,我们不应该在系统中使用,我们只需要一个dialect = mysql 或者 dialect = oracle就够了,如果系统中需要使用,还是得问问自己,是否线. PageHelper源码分析

  autoRuntimeDialect:多个数据源切换时,比如mysql和oracle数据源同时存在,就不能简单指定dialect,这个时候就需要运行时自动检测当前的dialect。

  ReentrantLock lock:这个lock对象是比较有意思的现象,urlSqlUtilMap明明是一个同步ConcurrentHashMap,又搞了一个lock出来同步ConcurrentHashMap做什么呢?是否是画蛇添足?在《Java并发编程实战》一书中有详细论述,简单的说,ConcurrentHashMap可以保证put或者remove方法一定是线程安全的,但它不能保证put、get、remove的组合操作是线程安全的,为了保证组合操作也是线程安全的,所以使用了lock。

  解析sql,并增加分页参数占位符,或者生成count查询的sql,都依靠Parser来完成。

  2、如果count=true,则执行count查询,结果total值保存于page对象中,继续执行分页查询。

  3、执行分页查询,将查询结果保存于page对象中,page是一个ArrayList对象。

  1、明确指定dialect。2、明确编写sql分页业务和与它对应的count查询,别图省事。

  版权提示:文章出自开源中国社区,若对文章感兴趣,可关注我的开源中国社区博客()。(经过网络爬虫或转载的文章,经常丢失流程图、时序图,格式错乱等,还是看原版的比较好)

  推荐一款Mybatis分页插件以前也写过一篇博文介绍Mybatis的插件,以及如何通过Mybatis的插件功能实现一个自定义的分页插件,但是那个插件的侵入性是比较大的。前段时间遇到了一款开源的Myba...

  Mybatis源码解析之核心类分析Mybatis源码解析之初始化分析Mybatis源码解析之执行流程解析Mybatis源码解析之数据库连接和连接池Mybatis源码解析之事务管理Mybatis源码解析...

  1分页内容存储2mybatisInterceptor在使用PageHelper的时候我很想知道它的分页信息存储位置,似乎是存在当前请求线程中。分页信息存储作者的例子

  PageHelper分页插件原理PageHelper本身是一个物理分页插件,实际原理就是修改最后的执行sql,增加相应的分页内容,是基于实现的。例如,首先你配置了PageHelper的Pagen...

  前因:项目一直使用的是PageHelper实现分页功能,项目前期数据量较少一直没有什么问题。随着业务扩增,数据库扩增PageHelper出现了明显的性能问题。几十万甚至上百万的单表数据查询性能缓慢,需...

  mybatis的分页插件:这个插件很强大,也很易用,唯一的美中不足是:分页查询的时候,只能返回Page或...

  写的第一篇文章,不足之处,请多提宝贵意见,谢谢。之前项目一直使用的是普元框架,最近公司项目搭建了新框架,主要是由公司的大佬搭建的,以springboot为基础。为了多学习点东西,我也模仿他搭了一套自己...

  使用分页插件的好处:在编写Web后台代码时,分页是必不可少的,当然最通常的思路是在Sql中使用分页关键字来进行分页。在实际开发中,更多的是使用分页插件来减少代码冗杂,使编码更加清晰思路:分页控制的代码...

  一准备工作下载jar包,以目前最新版本4.15为例,java1.6,数据库是mysql二添加两个下载完的ja...

  闲来无事,特地整理了一下MyBatis实现分页的原理。地球人应该都知道要利用JDBC对数据库进行操作,就需要一个statement对象,MyBatis也是如此。MyBatis在执行sql语句前会...

  初始链接:供Oracle技术爱好者参考。这些内容本着交流的目的,请不要用作商业利益.如果侵犯您的...

  以前使用ibatis/mybatis,都是比人配置好的我们只需要用就好了,最近一个人在做一个小项目,需要用到就去网上看了一下教程,发现还挺简单的,PageHelper感觉还不错是通过mybatis的p...

  Ø根据实际业务场景需求,对待办任务和已办任务需要进行分页查询Ø先查询出所有的待办任务,然后根据任务id查询出所有的变量Ø查询一对多问题:分页插件不支持嵌套结果映射,由于嵌套结果方式会导致结果集被折叠,...

  pagehelper是一个简单的实现分页技巧的插件我们要使用这个插件无可避免的需要引用它的jar包,你可以从下面的地址中下载最新版本的jar包1:

  使用PageHelper插件实现分页功能分页的功能几乎是所有项目必备的功能,在SSM(spring、springmvc、mybatis)组织的项目中如何实现分页呢?下面介绍一种基于mybatis的分页...

  1.引入分页插件1.引入Jar包如果你想使用本项目的jar包而不是直接引入类,你可以在这里下载各个版本的jar包(点击Download下的jar即可下载)

http://lotusyogacenter.com/wulifenye/192.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有