Mybatis分页插件PageHelper的使用

来源:互联网 发布:贝斯内录用什么软件 编辑:程序博客网 时间:2024/05/21 09:44

不知道你发现了没有,Mybatis基于内存的分页功能很弱,因为它是查出所有的记录再按偏移量和limit取结果。在大数据量的情况下这样的分页基本上是没用的。而按照以前的做法,我们通常是封装一个分页的工具类的,一般是selectCount(有多少条记录)和selectPage(当前页的索引,一般从0开始)才能实现分页功能。但这里Mybatis提供了一个通用的分页插件PageHelper,这里就简单介绍一个这个分页插件PageHelper的使用。
首先在pom文件中添加依赖

<dependency>  <groupId>com.github.pagehelper</groupId>    <artifactId>pagehelper</artifactId>    <version>4.0.0</version></dependency><dependency>   <groupId>com.github.miemiedev</groupId>    <artifactId>mybatis-paginator</artifactId>    <version>1.2.5</version></dependency><dependency>    <groupId>org.apache.commons</groupId>    <artifactId>commons-io</artifactId>    <version>1.3.2</version></dependency>

添加配置文件SqlPageHelper.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>    <!-- com.github.pagehelper为PageHelper类所在包名 -->    <plugin interceptor="com.github.pagehelper.PageHelper">        <!-- 4.0.0以后版本可以不设置该参数 -->        <property name="dialect" value="mysql"/>        <!-- 该参数默认为false -->        <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->        <!-- 和startPage中的pageNum效果一样-->        <property name="offsetAsPageNum" value="true"/>        <!-- 该参数默认为false -->        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->        <property name="rowBoundsWithCount" value="true"/>        <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->        <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->        <property name="pageSizeZero" value="true"/>        <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->        <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->        <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->        <property name="reasonable" value="true"/>        <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->        <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->        <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->        <!-- 不理解该含义的前提下,不要随便复制该配置 -->        <property name="params" value="pageNum=start;pageSize=limit;"/>        <!-- 支持通过Mapper接口参数来传递分页参数 -->        <property name="supportMethodsArguments" value="true"/>        <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->        <property name="returnPageInfo" value="check"/>    </plugin></plugins></configuration>

在Mybatis配置文件中配置加载Mybatis全局配置文件

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    <property name="dataSource" ref="dataSource" />    <!-- 加载mybatis的全局配置文件 -->    <property name="configLocation" value="classpath:SqlPageHelper.xml" /></bean>

service实现

public List<UserInfo> queryUserList() {    List<UserInfo> userInfoList = userInfoMapper.queryUserInfoList();    return userInfoList;}

controller层

@SuppressWarnings("unchecked")@RequestMapping(value = "/userList", method = { RequestMethod.POST, RequestMethod.GET})public ModelAndView userList(HttpServletRequest request, HttpServletResponse response) throws Exception{    String pageNum = request.getParameter("pageNum");    String pageSize = request.getParameter("pageSize");    int beginnum = 1;    int beginsize = 10;    if(pageNum != null && !"".equals(pageNum)){        beginnum = Integer.parseInt(pageNum);    }    if(pageSize != null && !"".equals(pageSize)){        beginsize  = Integer.parseInt(pageSize);    }    String sortString = "id.desc";    Order.formString(sortString);    PageHelper.startPage(beginnum, beginsize);    List<UserInfo> userInfoList = userInfoService.queryUserInfoList();    PageInfo<UserInfo> pagehelper = new PageInfo<UserInfo>(userInfoList);    //返回ModelAndView    ModelAndView modelAndView = new ModelAndView();    modelAndView.addObject("pagehelper", pagehelper);    modelAndView.setViewName("userList");    return modelAndView;}
1 0
原创粉丝点击