`
234390216
  • 浏览: 10239039 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462906
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1776015
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398770
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395162
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680178
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531162
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1185054
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468860
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151503
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68352
社区版块
存档分类
最新评论

推荐一款Mybatis分页插件

阅读更多

推荐一款Mybatis分页插件

以前也写过一篇博文介绍Mybatis的插件,以及如何通过Mybatis的插件功能实现一个自定义的分页插件,但是那个插件的侵入性是比较大的。前段时间遇到了一款开源的Mybatis分页插件,叫PageHelper,github地址是https://github.com/pagehelper/Mybatis-PageHelper,其原理是通过ThreadLocal来存放分页信息,从而可以做到在Service层实现无侵入性的Mybatis分页。笔者感觉还不错,所以特意发博文记录一下,并推荐给大家。

简单示例

以下是使用PageHelper进行分页的一个简单的示例,更多详细的内容,请大家参数上面提供的github地址

添加依赖

笔者使用的是Maven,添加依赖如下。

<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>4.1.6</version>
</dependency>

注册Mybatis Plugin

跟其它Mybatis Plugin一样,我们需要在Mybatis的配置文件中注册需要使用的Plugin,PageHelper中对应的Plugin实现类就是com.github.pagehelper.PageHelper自身。顺便说一句,Mybatis的Plugin我们说是Plugin,实际上对应的却是org.apache.ibatis.plugin.Interceptor接口,因为Interceptor的核心是其中的plugin(Object target)方法,而对于plugin(Object target)方法的实现,我们在需要对对应的对象进行拦截时会通过org.apache.ibatis.plugin.Plugin的静态方法wrap(Object target, Interceptor interceptor)返回一个代理对象,而方法入参就是当前的Interceptor实现类。

<plugins>  
   <plugin interceptor="com.github.pagehelper.PageHelper"/>  
</plugins>

使用PageHelper

PageHelper拦截的是org.apache.ibatis.executor.Executorquery方法,其传参的核心原理是通过ThreadLocal进行的。当我们需要对某个查询进行分页查询时,我们可以在调用Mapper进行查询前调用一次PageHelper.startPage(..),这样PageHelper会把分页信息存入一个ThreadLocal变量中。在拦截到Executorquery方法执行时会从对应的ThreadLocal中获取分页信息,获取到了,则进行分页处理,处理完了后又会把ThreadLocal中的分页信息清理掉,以便不影响下一次的查询操作。所以当我们使用了PageHelper.startPage(..)后,每次将对最近一次的查询进行分页查询,如果下一次查询还需要进行分页查询,需要重新进行一次PageHelper.startPage(..)。这样就做到了在引入了分页后可以对原来的查询代码没有任何的侵入性。此外,在进行分页查询时,我们的返回结果一般是一个java.util.ListPageHelper分页查询后的结果会变成com.github.pagehelper.Page类型,其继承了java.util.ArrayList,所以不会对我们的方法声明造成影响。com.github.pagehelper.Page中包含有返回结果的分页信息,包括总记录数,总的分页数等信息,所以一般我们需要把返回结果强转为com.github.pagehelper.Page类型。以下是一个简单的使用PageHelper进行分页查询的示例代码。

public class PageHelperTest {
	
	private static SqlSessionFactory sqlSessionFactory;
	private SqlSession session;
	
	@BeforeClass
	public static void beforeClass() throws IOException {
		InputStream is = Resources.getResourceAsStream("mybatis-config-single.xml");
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
	}
	
	@Before
	public void before() {
		this.session = sqlSessionFactory.openSession();
	}
	
	@After
	public void after() {
		this.session.close();
	}

	@Test
	public void test() {
		int pageNum = 2;//页码,从1开始
		int pageSize = 10;//每页记录数
		PageHelper.startPage(pageNum, pageSize);//指定开始分页
		UserMapper userMapper = this.session.getMapper(UserMapper.class);
		List<User> all = userMapper.findAll();
		Page<User> page = (Page<User>) all;
		System.out.println(page.getPages());
		System.out.println(page);
	}
	
}

以上是通过PageHelper.startPage(..)传递分页信息的示例,其实PageHelper还支持Mapper参数传递分页信息等其它用法。关于PageHelper的更多用法和配置信息等请参考该项目的GitHub官方文档

(本文由Elim写于2017年5月31日)

3
1
分享到:
评论
3 楼 diggywang 2017-06-04  
shiylqq 写道
以前使用的时候发现和dubbo同时使用时,夸jvm调用Page对象不能反序列话,不知道现在支持了没

这个只要自己定义的对象实现serializable接口就可以了吧,和Page无关。何况Page是继承ArrayList的,本身就实现了Serializable接口
2 楼 234390216 2017-06-01  
shiylqq 写道
以前使用的时候发现和dubbo同时使用时,夸jvm调用Page对象不能反序列话,不知道现在支持了没

我们的经验是实现自己的Page,不依赖其它第三方的Page,这样方便以后调整和扩展。所以没有遇到你说的问题。
1 楼 shiylqq 2017-06-01  
以前使用的时候发现和dubbo同时使用时,夸jvm调用Page对象不能反序列话,不知道现在支持了没

相关推荐

    06实现mybatis分页插件demo

    06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo...

    mybatis分页插件代码

    【标题】"mybatis分页插件代码"主要涉及到MyBatis框架中的一种增强功能——分页插件的使用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在处理大数据量时,分页查询是必不可少的优化...

    MyBatis分页插件.rar

    MyBatis分页插件是数据库操作中常用的一种工具,它可以帮助开发者在使用MyBatis框架进行数据查询时实现高效且便捷的分页功能。在Java Web开发中,当需要处理大量的数据时,分页显示不仅可以提高用户体验,也能减轻...

    mybatis分页插件的使用

    针对这一问题,Mybatis分页插件——PageHelper应运而生,它简化了分页操作的过程,提高了开发效率。该插件目前支持多种主流数据库如Oracle、MySQL、MariaDB、SQLite、Hsqldb以及PostgreSQL。 #### 二、PageHelper的...

    mybatis分页插件支持查询

    mybatis分页插件支持查询~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    mybatis分页插件源码

    下面我们将深入探讨MyBatis分页插件的相关知识点。 1. **MyBatis框架基础** MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果...

    mybatis 分页插件jar包

    PageHelper是MyBatis分页插件中最受欢迎的一个,由开源社区维护和更新。它的主要作用在于将原本繁琐的分页代码简化,通过简单的配置和调用,就能实现数据库查询结果的分页显示。这极大地提高了开发效率,减少了出错...

    mybatis的分页插件

    MyBatis 分页插件是针对 MyBatis 框架设计的一款强大的辅助工具,它极大地简化了在数据库查询时的分页操作。在没有分页插件的情况下,开发者需要手动编写分页相关的 SQL 语句,这既繁琐又容易出错。而 PageHelper ...

    mybatis平台包 集成分页插件

    mybatis集成了分页的插件,采用springmvc+spring+mybatis或者springboot+mybatis的时候可以无缝对接使用

    基于mysql的数据库mybatis 分页插件

    mybatis 分页 mybatis-...大家知道mybatis自动生成代码是没有分页功能的 我在网上找了很久 有很多内容 但正真可以使用的少之又少 本人整合了网上的资源 整理了基于Mysql数据库的mybatis插件 经测试可以完美运行。。

    javaee-SpringMVC-Mybatis 分页插件

    本项目“javaee-SpringMVC-Mybatis 分页插件”显然是一个结合了这三个框架实现的分页功能示例。下面我们将深入探讨这些技术及其分页插件的应用。 1. **JavaEE**:JavaEE(Java Platform, Enterprise Edition)是...

    springboot项目(四)添加mybatis分页插件

    在本篇中,我们将深入探讨如何在Spring Boot项目中集成MyBatis分页插件,以便为数据库查询提供高效、便捷的分页功能。Spring Boot以其简洁的配置和快速的开发体验深受开发者喜爱,而MyBatis作为轻量级持久层框架,与...

    mybatis分页插件,支持kingbase、tdengine、达梦、mysql、oracle、sqlserver等数据库

    下面我们将详细探讨MyBatis分页插件的核心功能、原理以及与各数据库系统的集成。 首先,MyBatis分页插件的核心功能是自动为SQL语句添加分页条件,这包括LIMIT子句(对于MySQL、MariaDB等)和ROWNUM或ROWNUMBER()...

    MyBatis 分页插件PageHelper Demo

    MyBatis PageHelper插件是一款专为MyBatis设计的高效分页插件,它可以无缝对接Spring MVC、Spring Boot等框架,大大简化了分页操作。下面我们将详细探讨PageHelper的使用方法及其在实际项目中的应用。 首先,我们...

    Mybatis分页插件 PageHelper5.0.0 使用

    Mybatis 分页插件 PageHelper5.0.0 是一个功能强大且易于使用的分页插件,它可以帮助开发者快速实现 Mybatis 的物理分页操作。下面是使用 PageHelper5.0.0 实现分页的详细教程: 一、添加依赖 首先,在 pom.xml ...

    Mybatis分页插件PageHelper简单使用.rar_C41_mybatis pagehelper_mybatis分页插件

    Mybatis PageHelper是一款非常流行的Mybatis分页插件,它为Mybatis提供了高效且便捷的分页功能。在Java Web开发中,数据的分页显示是必不可少的,尤其是在处理大量数据时,PageHelper能帮助我们有效地管理和展示数据...

    mybatis分页插件包

    mybatis最强大的分页插件,没有之一!插件使用请参见http://my.oschina.net/miemiedev/blog/135516

    Mybatis分页插件PageHelper的JAR包

    Mybatis分页插件PageHelper是Java开发中广泛使用的数据库分页工具,它与Mybatis框架无缝集成,极大地简化了在大数据量查询时的分页处理。PageHelper提供了高效的分页功能,支持多种数据库,包括MySQL、Oracle、SQL ...

    pagehelper-fix/pagehelper 淘淘商城MyBatis分页插件

    而“淘淘商城MyBatis分页插件”表明这个项目是基于MyBatis的,MyBatis是一款轻量级的持久层框架,它允许开发者自由地编写SQL语句,同时提供了强大的映射功能,将Java对象与数据库表进行关联。 【标签】中的...

Global site tag (gtag.js) - Google Analytics