首先讲解插件的正确使用方法

1.maven的pom.xml中配置pagehelper,引入它的jar包

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

2.添加一个分页插件的配置文件,我的名字叫在spring-mybatis-pageHelper.xml

该配置文件的内容为:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <plugins>
        <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>

注意,这是所有属性的配置,注意注意,有些属性是版本对应的,如果你是高版本的PageHelper,配置了低版本的属性,则会导致分页失效,比如4.0.0版本的指明数据库属性,因为我引用的是5.0.0的版本,如果在配置文件中声明了此属性,则导致分页无效。比如像这样:

分页失效

3.在sqlSessionFactory中指定配置文件

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自动扫描mapping.xml文件 -->  
        <property name="mapperLocations" value="classpath:com/myr/ssms/mapper/xml/*.xml">
        </property>  
    	<!--设置pageHelper-->
        <property name="configLocation" value="classpath:spring-mybatis-pageHelper.xml">
        </property>
/bean>  

在web.xml中指定spring-mybatis.xml,我想不必多说,如下图

此处如果多指定了pageHelper的配置文件,也会导致pageHlper分页无效,无解

4.在控制层编写查询代码

当然你的服务层和mapper层都应该编写相应的查询方法,此处不再赘述

 /**
	 * 查询员工数量(分页查询)
	 * @return
	 */
	@RequestMapping("/users")
	public String getEmps(@RequestParam(value="pn",defaultValue="1")Integer pn,
			Model model) {
		//这不是一个分页查询
		//引入PageHepler分页插件  https://github.com/pagehelper/Mybatis-PageHelper
		//在查询之前调用,传入页码,以及每页的大小 		//在startPage后面紧跟的这个查询就是分页查询
		PageHelper.startPage(pn,5);
		List<User> emps = userServiceImplement.getAllUsers();
		//使用pageInfo包装查询后的结果,只要将pageInfo交给页面就行了
		//封装了详细的分页信息,包括有我们查询出来的数据
		PageInfo<User> page = new PageInfo<User>(emps,5);
		model.addAttribute("pageInfo",page);   //用model返回给页面数据
		
		return "list";
	}

5.PageHelper的许多属性,参阅官方文档,地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐