SpringBoot整合PageHelper做多條件分頁查詢


https://yq.aliyun.com/articles/619586

 

本篇博客講述如何在SpringBoot中整合PageHelper,如何實現帶多個條件,以及PageInfo中的屬性的中文解釋(翻譯)

一,jar包

 

        <!-- 分頁插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

 

 

二,注冊Configuration插件

 

package cn.dawn.util;

/**
 * Created by Dawn on 2018/6/24.
 */
import java.util.Properties;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.github.pagehelper.PageHelper;

/*
 * 注冊MyBatis分頁插件PageHelper
 */

@Configuration
public class MybatisConf {
    @Bean
    public PageHelper pageHelper() {
        System.out.println("MyBatisConfiguration.pageHelper()");
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        p.setProperty("offsetAsPageNum", "true");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

 

三,dao層接口

 

package cn.dawn.mapper;

import cn.dawn.entity.Sys_noteDetail;

import java.util.List;
import java.util.Map;

/**
 * Created by Dawn on 2018/4/16.
 */
public interface INoteDAO {


    /*筆記分頁查詢*/
    public List<Sys_noteDetail> getOnePagenoteData(Map<String, Object> map) throws Exception;


}

 

  做帶條件分頁最好是Map,因為特別容易整合智能標簽,它的多條件就是Map傳進來的

四,dao層xml配置

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper  namespace="cn.dawn.mapper.INoteDAO">


    <!--分頁查詢-->

    <select id="getOnePagenoteData" resultType="cn.dawn.entity.Sys_noteDetail">
        SELECT * FROM sys_notedetail
        <where>
            <if test="dname!= null and dname!=''">
                AND dname LIKE  '%' #{dname} '%'
            </if>
            <if test="startdate!= null and startdate!=''">
                AND dentrytime&gt;=#{startdate}
            </if>
            <if test="enddate!= null and enddate!=''">
                AND dentrytime&lt;=#{enddate}
            </if>
        </where>
    </select>


</mapper>

 

五,調用PageHelper,真正使用它

 

package cn.dawn.service.impl;

import cn.dawn.entity.Sys_noteDetail;
import cn.dawn.mapper.INoteDAO;
import cn.dawn.service.INoteService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Dawn on 2018/4/16.
 */
@Service("noteServiceImpl")
public class NoteServiceImpl implements INoteService{
    @Resource(name = "INoteDAO")
    private INoteDAO iNoteDAO;


    public PageInfo<Sys_noteDetail> getOnePagenoteData(Integer pageIndex, Integer pageSize, String dname, Date startdate, Date enddate) throws Exception {
         /*創建分頁工具類*/
        PageHelper.startPage(pageIndex, pageSize);
        Map<String,Object> map=new HashMap<String,Object>();
        map.put("dname",dname);
        map.put("startdate",startdate);
        map.put("enddate",enddate);
        List<Sys_noteDetail> docs = iNoteDAO.getOnePagenoteData(map);
        PageInfo<Sys_noteDetail> pageInfo = new PageInfo<>(docs);
        return pageInfo;

    }

}

 

六,講述一下PageInfo,方便調用

 

    //當前頁  
    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;  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM