Mybatis分页插件PageHelper配置及使用方法详解

环境

框架:spring+springmvc+mybatis

pom.xml

<!-- 引入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>

使用

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

package com.szfore.model;
import java.util.Date;
import java.util.List;
public class User {
	private Integer id;
	private String uname;
	private String pwd;
	private String name;
	private Integer sex;
	private String phone;
	private String company;
	private String jobtitle;
	private String birth;
	private Date createdate;
	private Date lastlogintime;
	private List<Role> roleList;
	public List<Role> getRoleList() {
		return roleList;
	}
	public void setRoleList(List<Role> roleList) {
		this.roleList = roleList;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname == null ? null : uname.trim();
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd == null ? null : pwd.trim();
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name == null ? null : name.trim();
	}
	public Integer getSex() {
		return sex;
	}
	public void setSex(Integer sex) {
		this.sex = sex;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone == null ? null : phone.trim();
	}
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company == null ? null : company.trim();
	}
	public String getJobtitle() {
		return jobtitle;
	}
	public void setJobtitle(String jobtitle) {
		this.jobtitle = jobtitle == null ? null : jobtitle.trim();
	}
	public String getBirth() {
		return birth;
	}
	public void setBirth(String birth) {
		this.birth = birth == null ? null : birth.trim();
	}
	public Date getCreatedate() {
		return createdate;
	}
	public void setCreatedate(Date createdate) {
		this.createdate = createdate;
	}
	public Date getLastlogintime() {
		return lastlogintime;
	}
	public void setLastlogintime(Date lastlogintime) {
		this.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
  private UserMapper userMapper;
  @Autowired
  private MenuMapper menuMapper;
  @Autowired
  private UserRoleMapper userRoleMapper;

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

通过PageInfo获取其他信息

PageHelper.startPage(req.getCurrentPage(), req.getPageSize(), true);
List<SecurityRiskLibary> list=securityRiskLibaryDAO.queryList(srl);
PageInfo page=new PageInfo(list);
page.getTotal();
page.xxxx

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Mybatis分页插件PageHelper的配置和简单使用方法(推荐)

    前言 在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分页 一次性请求数据表格中的所有记录(ajax),然后在前端缓存并且计算count和分页逻辑,一般前端组件(例如dataTable)会提供分页动作. 特点是:简单,很适合小规模的web平台:当数据量大的时候会产生性能问题,在查询和网络传输的时间会很长. 后端分页 在ajax请求中指定页码(pageNum)和每页的大小(pageSize),后端查询出当页的数据返回

  • SpringBoot集成MyBatis的分页插件PageHelper实例代码

    昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心得和源码,主要就算是敲了一下SpringBoot的门儿,希望能给各位的入门带给一点儿捷径,今天给各位温习一下MyBatis的分页插件PageHelper和SpringBoot的集成,它的使用也非常简单,开发更为高效.因为PageHelper插件是属于MyBatis框架的,所以相信很多哥们儿都已经用烂了,下面带着各位吃一下回头草. 首先说说MyBatis框架的PageHelper插件吧,它是一个非常好用的分页插件,通

  • mybatis使用pageHelper插件进行查询分页

    在数据库服务器中,sql语句实现分页便要每个查询语句都要写上limit(开始,结束),并且不能灵活的随前端变化,为此使用拦截器的方法,过程:拦截器拦截请求的sql语句(根据需要拦截的ID(正则匹配),进行拦截),并对根据前端传过来的页数,和每页的条数,计算出limit(开始,结束),总条数,然后,拼接到sql语句后边.其中这个处理过程,已经封装到了,分页插件中,可以不用理解,直接使用. mybatis查询分页---使用pageHelper插件 之前在spring+springmvc由于整个大多都

  • mybatis插件pageHelper实现分页效果

    最近做的一个项目在持久层我们采用的是Mybatis今天完成了商品列表的分页查询的功能,这篇博客我分享一下如何采用pageHelper的插件实现分页.mybatis的应用,最大的好处就在于我们可以更加方便灵活的编写我们的sql语句,实现对单表或者多表的增删改查,在这基础上我们使用pageHelper插件实现分页更加方便了我们对项目的开发,提高了开发效率,我们以实现商品列表的查询为背景,详细介绍一下如何应用这个插件简单的实现分页功能. 1.jar包引入 我们项目中在依赖管理方面采用的是Maven,所

  • Mybatis分页插件PageHelper的使用详解

    1.说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页. 2.使用方法 第一步:在Mybatis配置xml中配置拦截器插件: <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pageh

  • mybatis分页插件pageHelper详解及简单实例

    mybatis分页插件pageHelper详解及简单实例 工作的框架spring springmvc mybatis3 首先使用分页插件必须先引入maven依赖,在pom.xml中添加如下 <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5

  • SpringBoot整合mybatis结合pageHelper插件实现分页

    SpringBoot整合mybatis分页操作 SpringBoot整合Mybatis进行分页操作,这里需要使用Mybatis的分页插件:pageHelper, 关于pageHelper的介绍,请查看官方文档: https://pagehelper.github.io/ 1.使用前配置 关于pageHelper的使用配置,主要有以下2个步骤: 1.1.在pom文件中导入pageHelper依赖 <dependency> <groupId>com.github.pagehelper&

  • 使用mybatis插件PageHelper实现分页效果

    最近都在忙着写一个网站项目,今天做一个分页功能的时候,遇到了分页效果实现不了的问题,查了好久的资料,后来终于是成功解决啦,记录一下~ 1.在pom.xml中添加分页插件依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.5</version> </depend

  • MyBatis分页插件PageHelper的具体使用

    MyBatis分页插件PageHelper 如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件.分页插件支持任何复杂的单表.多表分页. PageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工. PageHelper的使用 优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便. 1.引入pagehelper依赖 <dependency> <groupId>com.github.pagehe

  • Mybatis分页插件PageHelper配置及使用方法详解

    环境 框架:spring+springmvc+mybatis pom.xml <!-- 引入mybatis的 pagehelper 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency&g

  • SpringBoot+Mybatis分页插件PageHelper实现分页效果

    目录 一.项目结构 二.插件引入 三.代码 四.测试: 最近刚入职新公司,项目是从零开始搭建的项目.我觉得是时候考验是驴还是千里马的时候.都是泪就不多说了. 附上一篇Mybatis常用的分页案例.这次要做的是最常见的分页效果,也是基础功能.但是很多人都做不好的.这次采用Mybatis分页插件PageHelper.   仅献给伸手党的大爷们.大爷们好!拿代码记得扣666!!小的在这给感谢了!! 一.项目结构 按照controller,service,mapper(也叫dao)来建立项目,utils

  • Mybatis分页插件PageHelper手写实现示例

    目录 引言 编写我们的插件类 上面有二个核心方法 获取记录总数 分页查询记录数 如何获取前端传递过来的参数? 总结 引言 PageHelper是一个非常好用的插件,以至于很想知道它底层是怎么实现的.至于MyBatis插件概念原理网上有很多,我不太喜欢去写一些概念性的东西,我比较喜欢自己动手实现的那种,话不多说,我们开干 搭建一个SpringBoot+MyBatis+MySql项目 编写我们的插件类 package com.example.demo.plugin; import org.apach

  • 解决mybatis分页插件PageHelper导致自定义拦截器失效

    目录 问题背景 mybatis拦截器使用 使用方法: 注解参数介绍: setProperties方法 bug内容: 自定义拦截器部分代码 PageInterceptor源码: 解决方法: 解决方案一 调整执行顺序 解决方案二 修改拦截器注解定义 问题背景 在最近的项目开发中遇到一个需求 需要对mysql做一些慢查询.大结果集等异常指标进行收集监控,从运维角度并没有对mysql进行统一的指标搜集,所以需要通过代码层面对指标进行收集,我采用的方法是通过mybatis的Interceptor拦截器进行

  • pycharm2020.2 配置使用的方法详解

    突然发现, pycharm 2020.2都出来了哈, 现在jetbrain团队对中文用户也比较友好, 比以前更加适合小白了 再就是很多类似的教程pycharm还停留在2018版本, 很多设置都完全不一样了 pycharm下载地址 https://www.jetbrains.com/pycharm/download/ 集成ide有个好处, 安装简单, 不用担心出问题, 直接无脑下一步就行了 1.安装中文包 file -->setting–> plugins–> 搜索Chinese , 安装

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

  • 文本溢出插件jquery.dotdotdot.js使用方法详解

    插件下载地址:https://github.com/FrDH/jQuery.dotdotdot 引入jQuery.js和jquery.dotdotdot.js <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.dotdotdot.js"><

随机推荐