Java分頁查詢的幾種實現(xiàn)方法舉例
前言
最近在做需求的過程中遇到幾個需要分頁查詢的需求,我也對分頁有了較深的了解。分頁一般分為兩種一種是直接在sql中分頁,一種是在內存中分頁。本文僅針對內存中分頁做記錄。
第一種
如果是一個查詢接口,向接口中傳入page,和size(page默認值1,size默認值10)即可,返回參數是github的PageInfo,里面在放實際返回類型。
進入實現(xiàn)層,使用PageHelper,并調用pageQuery方法即可完成分頁,以下為Pagehelper的具體代碼 。(但需注意,此方法只適用于從數據庫中直接查出的數據,如果將查出的數據進行二次封裝則會導致分頁失?。?/p>
import com.github.pagehelper.Page; import lombok.experimental.UtilityClass; import org.springframework.beans.BeanUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.util.List; import java.util.Objects; import java.util.function.Supplier; /** * @author LIUQIFAN */ @UtilityClass public class PageHelper { /** * 要求 請求參數: ?pageNum=xxx&pageSize=xxx * * @param supplier 查詢方法 * @param <T> 類型對象 * @return 結果集 */ public static <T> PageInfo<T> pageQuery(Supplier<List<T>> supplier) { ServletRequestAttributes attributes = (ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes(), "無法獲取request"); Page<Object> page = com.github.pagehelper.PageHelper.startPage(attributes.getRequest()); //======================== List<T> list = supplier.get(); PageInfo<T> pageInfo = new PageInfo<>(); BeanUtils.copyProperties(page.toPageInfo(), pageInfo); pageInfo.setList(list); return pageInfo; } /** * @param pageNum 頁號 * @param pageSize 每頁數據大小 * @param <T> 類型 * @return 結果集 */ public static <T> PageInfo<T> pageQuery(int pageNum, int pageSize, Supplier<List<T>> supplier) { Page<Object> page = com.github.pagehelper.PageHelper.startPage(pageNum, pageSize, true); List<T> list = supplier.get(); PageInfo<T> pageInfo = new PageInfo<>(); BeanUtils.copyProperties(page.toPageInfo(), pageInfo); pageInfo.setList(list); return pageInfo; } /** * @param supplier 查詢方法 * @param <T> 類型對象 * @return 結果集 */ public static <T> List<T> pQuery(Supplier<List<T>> supplier) { ServletRequestAttributes attributes = (ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes(), "無法獲取request"); com.github.pagehelper.PageHelper.startPage(attributes.getRequest()); //======================== return supplier.get(); } /** * @param pageNum 頁號 * @param pageSize 每頁數據大小 * @param <T> 類型 * @return 結果集 */ public static <T> List<T> pQuery(int pageNum, int pageSize, Supplier<List<T>> supplier) { com.github.pagehelper.PageHelper.startPage(pageNum, pageSize, true); return supplier.get(); } }
第二種
這種方法是我第一次使用,把入參的page和size封裝成了對象PageDomain
PageDomain代碼如下
@Data public class PageDomain1 { /** * 當前頁 */ private Integer page = 1; /** * 每頁數量 */ private Integer limit = 10; /** * 獲取開始的數據行 */ public Integer start() { return (this.page - 1) * this.limit; } /** * 獲取結束的數據行 */ public Integer end() { return this.page * this.limit; } }
這是控制層代碼
這是實現(xiàn)層代碼,這里的resultList,是我們先從數據庫中查出來的結果集,再用PageUtils的Startpage方法進行分頁操作,最后組裝PageInfo返回體
下面是PageUtils的代碼
總結
到此這篇關于Java分頁查詢的幾種實現(xiàn)方法的文章就介紹到這了,更多相關Java分頁查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot themaleaf 第一次進頁面不加載css的問題
這篇文章主要介紹了springboot themaleaf 第一次進頁面不加載css的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10SpringBoot入門實現(xiàn)第一個SpringBoot項目
今天我們一起來完成一個簡單的SpringBoot(Hello World)。就把他作為你的第一個SpringBoot項目。具有一定的參考價值,感興趣的可以了解一下2021-09-09Java查詢Elasticsearch數據根據指定id檢索(in查詢)、sql權限過濾、多字段匹配檢索及數據排序
在Java開發(fā)中Elasticsearch(簡稱ES)是一個非常流行的搜索引擎,它提供了強大的全文搜索和分析功能,這篇文章主要給大家介紹了關于Java查詢Elasticsearch數據根據指定id檢索(in查詢)、sql權限過濾、多字段匹配檢索及數據排序的相關資料,需要的朋友可以參考下2024-05-05