mybatis分页插件PageHelper使用

一、环境

开发工具:idea

jdk:1.7

mysql:5

框架:spring+springmvc+mybatis

使用 maven 来管理项目

二、与 ssm 整合

  • 第一步:在 pom.xml 引入 PageHelper 的依赖
<!-- 引入 mybatis 的 pagehelper 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>
  • 第二步:在 mybatis 的全局配置文件中配置 PageHelper 分页插件
<?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>
	<!-- 引入 pageHelper 插件 -->
	<!-- 注意这里要写成 PageInterceptor, 5.0 之前的版本都是写 PageHelper, 5.0 之后要换成 PageInterceptor-->
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			<!--reasonable:分页合理化参数,默认值为 false, 直接根据参数进行查询。
			  当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。-->
			<!--<property name="reasonable" value="true"/>-->
		</plugin>
	</plugins>
</configuration>

 

三、使用

例如:实现对用户的多条件查询

  • User 实体类
package com.szfore.model;

import java.util.Date;
import java.util.List;

public class User {
private Integer id;

<span style="color: rgba(0, 0, 255, 1)">private</span> String uname;

<span style="color: rgba(0, 0, 255, 1)">private</span> String pwd;

<span style="color: rgba(0, 0, 255, 1)">private</span> String name;

<span style="color: rgba(0, 0, 255, 1)">private</span> Integer sex;

<span style="color: rgba(0, 0, 255, 1)">private</span> String phone;

<span style="color: rgba(0, 0, 255, 1)">private</span> String company;

<span style="color: rgba(0, 0, 255, 1)">private</span> String jobtitle;

<span style="color: rgba(0, 0, 255, 1)">private</span> String birth;

<span style="color: rgba(0, 0, 255, 1)">private</span> Date createdate;

<span style="color: rgba(0, 0, 255, 1)">private</span> Date lastlogintime;

<span style="color: rgba(0, 0, 255, 1)">private</span> List&lt;Role&gt; roleList;

<span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;Role&gt; getRoleList() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> roleList;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setRoleList(List&lt;Role&gt; roleList) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.roleList = roleList;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> Integer getId() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> id;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setId(Integer id) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.id = id;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> String getUname() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> uname;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setUname(String uname) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.uname = uname == <span style="color: rgba(0, 0, 255, 1)">null</span> ? <span style="color: rgba(0, 0, 255, 1)">null</span> : uname.trim();
}

<span style="color: rgba(0, 0, 255, 1)">public</span> String getPwd() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> pwd;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setPwd(String pwd) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.pwd = pwd == <span style="color: rgba(0, 0, 255, 1)">null</span> ? <span style="color: rgba(0, 0, 255, 1)">null</span> : pwd.trim();
}

<span style="color: rgba(0, 0, 255, 1)">public</span> String getName() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> name;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setName(String name) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.name = name == <span style="color: rgba(0, 0, 255, 1)">null</span> ? <span style="color: rgba(0, 0, 255, 1)">null</span> : name.trim();
}

<span style="color: rgba(0, 0, 255, 1)">public</span> Integer getSex() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> sex;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setSex(Integer sex) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.sex = sex;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> String getPhone() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> phone;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setPhone(String phone) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.phone = phone == <span style="color: rgba(0, 0, 255, 1)">null</span> ? <span style="color: rgba(0, 0, 255, 1)">null</span> : phone.trim();
}

<span style="color: rgba(0, 0, 255, 1)">public</span> String getCompany() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> company;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setCompany(String company) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.company = company == <span style="color: rgba(0, 0, 255, 1)">null</span> ? <span style="color: rgba(0, 0, 255, 1)">null</span> : company.trim();
}

<span style="color: rgba(0, 0, 255, 1)">public</span> String getJobtitle() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> jobtitle;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setJobtitle(String jobtitle) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.jobtitle = jobtitle == <span style="color: rgba(0, 0, 255, 1)">null</span> ? <span style="color: rgba(0, 0, 255, 1)">null</span> : jobtitle.trim();
}

<span style="color: rgba(0, 0, 255, 1)">public</span> String getBirth() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> birth;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setBirth(String birth) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.birth = birth == <span style="color: rgba(0, 0, 255, 1)">null</span> ? <span style="color: rgba(0, 0, 255, 1)">null</span> : birth.trim();
}

<span style="color: rgba(0, 0, 255, 1)">public</span> Date getCreatedate() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> createdate;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setCreatedate(Date createdate) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.createdate = createdate;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> Date getLastlogintime() {
    <span style="color: rgba(0, 0, 255, 1)">return</span> lastlogintime;
}

<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setLastlogintime(Date lastlogintime) {
    <span style="color: rgba(0, 0, 255, 1)">this</span>.lastlogintime = lastlogintime;
}

}

View Code
  • UserMapper      注意:mapper 中就按不分页的那种写法就好
package com.szfore.dao;

import com.szfore.model.User;
import com.szfore.model.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper {
/**
* 多条件分页查询
* @param userParam
* @return
*/

public List<User> queryByPage(User userParam);
}

  • UserMapper.xml    注意:sql 中就不要写 limit 了,pageHelp 会自己处理,sql 就按不分页的那种写法就好

 

<!-- 多条件分页查询用户 -->
  <select id="queryByPage" resultType="com.szfore.model.User">
    SELECT
          *
    FROM
        `user` 
    <WHERE>
         <if test="id != null and id !=''">
          AND id = #{id}        </if>        <if test="uname != null and uname !=''">
          AND uname = #{uname}
        </if>
        <if test="name != null and name !=''">
          AND name like '%${name}%'
        </if>
        <if test="phone != null and phone !=''">
          AND phone like '%${phone}%'
        </if>
        <if test="company != null and company !=''">
          AND company like '%${company}%'
        </if>
        <if test="jobtitle != null and jobtitle !=''">
          AND jobTitle like '%${jobtitle}%'
        </if>
        <if test="birth != null and birth !=''">
          AND birth like '%${birth}%'
        </if>
  </WHERE>

</select>

View Code

 

 

 

  • UserServiceImpl
package com.szfore.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.szfore.dao.MenuMapper;
import com.szfore.dao.UserMapper;
import com.szfore.dao.UserRoleMapper;
import com.szfore.model.*;
import com.szfore.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class UserServiceImpl implements IUserService{

@Autowired
<span style="color: rgba(0, 0, 255, 1)">private</span> UserMapper userMapper;
@Autowired
<span style="color: rgba(0, 0, 255, 1)">private</span> MenuMapper menuMapper;
@Autowired
<span style="color: rgba(0, 0, 255, 1)">private</span> UserRoleMapper userRoleMapper;

<span style="color: rgba(0, 128, 0, 1)">/**
 * 多条件分页查询用户
 * @param userParam
 * @param pageNum
 * @param pageSize
 * @return
 */</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Json queryByPage(User userParam,Integer pageNum,Integer pageSize) {
    <span style="color: rgba(0, 128, 0, 1)">//利用PageHelper分页查询 注意:这个一定要放查询语句的前一行,否则无法进行分页,因为它对紧随其后第一个sql语句有效</span>
    PageHelper.startPage(pageNum, pageSize);
    List&lt;User&gt; userList = userMapper.queryByPage(userParam);
    PageInfo&lt;User&gt; pageInfo = <span style="color: rgba(0, 0, 255, 1)">new</span> PageInfo&lt;User&gt;(userList);
    Json json = <span style="color: rgba(0, 0, 255, 1)">new</span> Json();
    json.setMsg("<span style="color: rgba(139, 0, 0, 1)">成功!</span>");
    json.setObj(pageInfo);
    json.setSuccess(<span style="color: rgba(0, 0, 255, 1)">true</span>);
    <span style="color: rgba(0, 0, 255, 1)">return</span> json;
}

}

说明:PageInfo 是 PageHelper 自带的分页对象类,详情如下:

当前页
private int pageNum;
每页的数量
private int pageSize;
当前页的数量
private int size;
// 由于 startRow 和 endRow 不常用,这里说个具体的用法  
// 可以在页面中 "显示 startRow 到 endRow 共 size 条数据"  

当前页面第一个元素在数据库中的行号
private int startRow;
当前页面最后一个元素在数据库中的行号
private int endRow;
总记录数
private long total;
总页数
private int pages;
结果集
private List<T> list;

第一页
private int firstPage;
前一页
private int prePage;

是否为第一页
private boolean isFirstPage = false;
是否为最后一页
private boolean isLastPage = false;
是否有前一页
private boolean hasPreviousPage = false;
是否有下一页
private boolean hasNextPage = false;
导航页码数
private int navigatePages;
所有导航页号
private int[] navigatepageNums;

View Code