• 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
  • 相关阅读:
    21.满足条件的01序列 卡特兰数
    20.求组合数 IV
    19.求组合数 III
    18.求组合数 II
    17.求组合数 I
    14.表达整数的奇怪方式 中国剩余定理 --------待复习标志--------
    16.高斯消元解异或线性方程组
    15.高斯消元解线性方程组
    writing: improvised lecture
    writing: a lesson about coronavirus epidemic
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13416870.html
Copyright © 2020-2023  润新知