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<Role> roleList; <span style="color: rgba(0, 0, 255, 1)">public</span> List<Role> 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<Role> 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; }
}
- 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>
- 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<User> userList = userMapper.queryByPage(userParam); PageInfo<User> pageInfo = <span style="color: rgba(0, 0, 255, 1)">new</span> PageInfo<User>(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;