推荐一款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.Executor
的query
方法,其传参的核心原理是通过ThreadLocal
进行的。当我们需要对某个查询进行分页查询时,我们可以在调用Mapper进行查询前调用一次PageHelper.startPage(..)
,这样PageHelper
会把分页信息存入一个ThreadLocal
变量中。在拦截到Executor
的query
方法执行时会从对应的ThreadLocal
中获取分页信息,获取到了,则进行分页处理,处理完了后又会把ThreadLocal
中的分页信息清理掉,以便不影响下一次的查询操作。所以当我们使用了PageHelper.startPage(..)
后,每次将对最近一次的查询进行分页查询,如果下一次查询还需要进行分页查询,需要重新进行一次PageHelper.startPage(..)
。这样就做到了在引入了分页后可以对原来的查询代码没有任何的侵入性。此外,在进行分页查询时,我们的返回结果一般是一个java.util.List
,PageHelper
分页查询后的结果会变成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日)
相关推荐
06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo...
mybatis分页插件支持查询~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
本链接主要为MyBatis使用分页插件实现分页所需Jar包
Mybatis分页插件PageHelper的jar文件,Mybatis分页插件PageHelper的jar文件,Mybatis分页插件PageHelper的jar文件 4.1.4版本
工具类flume官方jar包,工具类flume官方jar包,工具类flume官方jar包,工具类flume官方jar包,
这是MyBatis的分页插件。解压后,可得到一个【pagehelper】的文件夹。该pagehelper中的pom.xml中的版本为3.4.2-fix。
springboot项目(四)添加mybatis分页插件
mybatis集成了分页的插件,采用springmvc+spring+mybatis或者springboot+mybatis的时候可以无缝对接使用
mybatis 分页 mybatis-...大家知道mybatis自动生成代码是没有分页功能的 我在网上找了很久 有很多内容 但正真可以使用的少之又少 本人整合了网上的资源 整理了基于Mysql数据库的mybatis插件 经测试可以完美运行。。
这个是mybatis分页插件的源码分享,支持mysql和oracl
javaee-SpringMVC-Mybatis 分页插件
http://git.oschina.net/free/Mybatis_PageHelper上面的mybatis分页插件
mybatis的分页插件,方便进行分页zszszszszszszszszszs
mybatis最强大的分页插件,没有之一!插件使用请参见http://my.oschina.net/miemiedev/blog/135516
mybatis分页插件,非入侵式,支持mysql,orcale,sqlserver,支持其他数据库拓展
mybatis 分页插件 PageHelper5.0.0 mybatis 最简单的方式实现物理分页
结合mybatis generator使用,自动生成代码,提供分页查询支持,功能其强大!