转载自 https://www.cnblogs.com/shanheyongmu/p/5864047.html

好多天没写博客了,因为最近在实习,大部分时间在熟悉实习相关的东西,也没有怎么学习新的东西,这周末学习了MyBatis的一个分页插件PageHelper,虽然没有那么的强大(我在最后会说明它的缺点),但还是挺不错的。这篇博文主要来总结下如何使用PageHelper。 
  我们知道,在MySQL中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的。但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了。 
  可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了。在介绍如何使用这个分页插件之前,先介绍一下mybatis中的插件是如何工作的,主要作用在哪个环节。我之前有写过一篇mybatis的一篇入门文章:宏观上把我mybatis框架。里面有张mybatis的工作原理图,为了方便叙述,我把图也放在这:

 
  从图中可以看出,mybatis中首先要在配置文件中配置一些东西,然后根据这些配置去创建一个会话工厂,再根据会话工厂创建会话,会话发出操作数据库的sql语句,然后通过执行器操作数据,再使用mappedStatement对数据进行封装,这就是整个mybatis框架的执行情况。那么mybatis的插件作用在哪一环节呢?它主要作用在Executor执行器与mappedeStatement之间,也就是说mybatis可以在插件中获得要执行的sql语句,在sql语句中添加limit语句,然后再去对sql进行封装,从而可以实现分页处理。 
  搞清楚了分页插件的执行情况,下面来总结下mybatis中PageHelper的使用。

1. 需要引入PageHelper的jar包

  如果没有使用maven,那直接把jar包导入到lib文件夹下即可,这个PageHelper插件在github上有开源,地址为:https://github.com/pagehelper/Mybatis-PageHelper/tree/master/src/main/java/com/github/pagehelper。 
如果使用了maven,那么只要在pom.xml中引入该插件即可,引入如下:

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

2. 在mybatis的全局配置文件SqlMapConfig.xml中配置该插件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置分页插件 --><plugins><plugin interceptor="com.github.pagehelper.PageHelper"><!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->        <property name="dialect" value="mysql"/></plugin></plugins></configuration>

3. 在执行sql前添加插件,完成分页功能

  在查询的sql语句执行之前,添加一行代码PageHelper.startPage(1, 10);第一个参数表示第几页,第二个参数表示每页显示的记录数。这样在执行sql后就会将记录按照语句中设置的那样进行分页。如果需要获取总记录数的话,需要PageInfo类的对象,这个对象可以获取总记录数,下面看下测试的代码。

public class TestPageHelper {@Testpublic void testPageHelper() {// 创建一个spring容器ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*");// 从spring容器中获取mapper代理对象TbItemMapper mapper = context.getBean(TbItemMapper.class);// 执行查询并分页,TbItemExample是逆向工程自动生成的,用来进行条件查询,这里不设置则表示无条件TbItemExample example = new TbItemExample();//分页处理,显示第一页的10条数据PageHelper.startPage(1, 10);List<TbItem> list = mapper.selectByExample(example);//查询// 取商品列表for(TbItem item : list) {System.out.println(item.getTitle());}// 取分页信息PageInfo<TbItem> pageInfo = new PageInfo<TbItem>(list);long total = pageInfo.getTotal(); //获取总记录数System.out.println("共有商品信息:" + total);}
}

看下执行的结果:

夏普(SHARP)LCD-46DS40A 46英寸 日本原装液晶面板 智能全高清液晶电视 
飞利浦 老人手机 (X2560) 深情蓝 移动联通2G手机 双卡双待 
中兴 U288 珠光白 移动3G手机 
三星 SCH-W899 亮金色 电信3G手机 双卡双待双通 
飞利浦 老人手机 (X2560) 喜庆红 移动联通2G手机 双卡双待 
飞利浦 老人手机 (X2560) 硬朗黑 移动联通2G手机 双卡双待 
三星 Galaxy S4 (I9500)16G版 皓月白 联通3G手机 
三星 Galaxy S4 (I9500) 16G版 星空黑 联通3G手机 
三星 I8552 白色 联通3G手机 双卡双待 
长虹(CHANGHONG) 3D51C1080i 51英寸 快门式3D智能Android 电视(黑色) 
共有商品信息:3096

可以看到,只显示出了10条数据,但是我总共有3096条数据,如果将参数改成(2,10),那么就会显示第二页不同的10条数据,在这就不测试了。这说明PageHelper插件可以帮助我们实现分页功能,例如EasyUI中就会传到后台分页参数信息,后台就可以根据参数获取分页数据等等。 
  正如前面所说,这个PageHelper其实也有缺点,因为它对逆向工程生成的代码支持不好,不能对有查询条件的查询分页,会抛异常,上面是无条件查询的。当然,我们自己可以修改这个PageHelper插件,使其支持条件查询,当然,我是修改不了的……网上有修改过后的PageHelper插件,可以支持条件查询,相对来说就比较强大了,可以在自己的工程中依赖修改过后的分页插件进行开发。

【MyBatis】MyBatis分页插件PageHelper的使用相关推荐

  1. SpringBoot集成MyBatis的分页插件PageHelper

    [写在前面] 项目的后台管理系统需要展示所有资源信息,select * 虽然方便但数据量过于庞大会严重降低查找效率,页面加载慢,用户体验差.分页自然是必要选择,但原生的方法过于繁杂.MyBatis的分 ...

  2. SpringBoot集成MyBatis的分页插件PageHelper(回头草)

    俗话说:好?不吃回头草,但是在这里我建议不管你是好马还是不好马,都来吃吃,带你复习一下分页插件PageHelper. 昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心 ...

  3. Java 逻辑分页 和 物理分页(mybatis的分页插件PageHelper)

    目录 1 逻辑分页和物理分页的区别 2 项目框架展示 2.1 相关技术 2.2 相关依赖和配置 2.2.1 pom依赖 2.2.2 yml配置 2.3 实体类 3 逻辑分页 3.1 Sevice层 3 ...

  4. Spring Boot系列教程八: Mybatis使用分页插件PageHelper

    一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...

  5. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper

    1. 概述 本文的内容包括如下内容: Spring Boot集成mybatis Spring Boot集成pagehelper分页插件,定义分页的相关类 实现工具类:model转dto,实现数据层和传 ...

  6. 【MyBatis】分页插件pageHelper的简单使用

    pageHelper就是mybatis拦截器的一个应用,实现分页查询,支持常见的 12 种数据库的物理分页并支持多种分页方式. 使用PageHelper的好处是在实际项目开发中更方便. 原因是:在项目 ...

  7. 学习Spring Boot:(八)Mybatis使用分页插件PageHelper

    首先Mybqtis可以通过SQL 的方式实现分页很简单,只要在查询SQL 后面加上limit #{currIndex} , #{pageSize}就可以了. 本文主要介绍使用拦截器的方式实现分页. 实 ...

  8. MyBatis使用分页插件pagehelper,遇到 IndexOutOfBoundsException: Index: 0, Size: 0] with root cause解决方法

    在不使用条件查询的时候内容会完整的查询出来 pagehelper在使用的时候它首先会通过你给的条件内容先去数据库查询出来有多少条记录 然后在通过你自己写SQL语句查询分页的内容 假如我的SQL语句是: ...

  9. hql分页获取数据总数_最简洁的分页插件PageHelper

    最简洁的分页插件PageHelper 简介 大部分后台管理项目,用的最多的展现方式是列表显示,所以我把列表查询中的分页插件拿出来写一下,方便以后写代码的时候直接复制粘贴.在我们最熟悉的springbo ...

  10. 解决使用mybatis分页插件PageHelper的一个报错问题

    解决使用mybatis分页插件PageHelper的一个报错问题 参考文章: (1)解决使用mybatis分页插件PageHelper的一个报错问题 (2)https://www.cnblogs.co ...

最新文章

  1. 荒岛野人[exgcd]
  2. linux服务器间文件夹拷贝
  3. Mixup vs. SamplePairing:ICLR2018投稿论文的两种数据增广方式
  4. 源数据怎么排查重复MySQL_面试官:在使用mysql数据库时,遇到重复数据怎么处理?...
  5. 计算机技术基础的心得体会,计算机技术基础学习心得体会5篇范文.docx
  6. Java网上商城系统_JavaWeb源码网上商城系统
  7. 高斯滤波算法之MatlabFPGA实现
  8. 基于FPGA的数字时钟verilog开发
  9. 【云原生之Docker实战】使用Docker部署BookStack文档管理系统
  10. ADS1115 应用指导
  11. matlab模拟塞曼图谱,C.基于LabVIEW的塞曼效应虚拟仿真-中国高等学校实验物理教学研究会.ppt...
  12. Java必突-JVM知识专题(一): Java代码是如何跑起来的+类加载到使用的过程+类从加载到使用核心阶段(类初始化)+类加载的层级结构+什么是JVM的内存区域划分?Java虚拟机栈、Java堆内存
  13. idea插件安装包下载
  14. latex公式左对齐
  15. 高性能浏览器网络(High Performance Browser Networking) 第四章
  16. 有故事的书单:June, 2018
  17. 线索二叉树、选择树、堆
  18. 计算机操作系统-概述
  19. Leetcode 1024 - 视频拼接
  20. [Kernel_exception6] BUG: scheduling while atomic

热门文章

  1. Vi(Linux系统下的标准编辑器)学习笔记
  2. Java笔记--实时更新
  3. ffmpeg推送摄像头rtmp流
  4. 【Boost】boost库asio详解1——io_service::run函数无任务时退出的问题
  5. 关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建
  6. 从零开始玩转JMX(二)——Condition
  7. 深度解密Go语言之Slice
  8. OS- -调度(一)
  9. shell编程之条件判断语句和流程控制语句
  10. ​冲刺最后一公里——音视频场景下的边缘计算实践