最近在做需求的過(guò)程中遇到幾個(gè)需要分頁(yè)查詢的需求,我也對(duì)分頁(yè)有了較深的了解。分頁(yè)一般分為兩種一種是直接在sql中分頁(yè),一種是在內(nèi)存中分頁(yè)。本文僅針對(duì)內(nèi)存中分頁(yè)做記錄。
第一種
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-461785.html
?如果是一個(gè)查詢接口,向接口中傳入page,和size(page默認(rèn)值1,size默認(rèn)值10)即可,返回參數(shù)是github的PageInfo,里面在放實(shí)際返回類型。
進(jìn)入實(shí)現(xiàn)層,使用PageHelper,并調(diào)用pageQuery方法即可完成分頁(yè),以下為Pagehelper的具體代碼 。(但需注意,此方法只適用于從數(shù)據(jù)庫(kù)中直接查出的數(shù)據(jù),如果將查出的數(shù)據(jù)進(jìn)行二次封裝則會(huì)導(dǎo)致分頁(yè)失敗)
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 { /** * 要求 請(qǐng)求參數(shù): ?pageNum=xxx&pageSize=xxx * * @param supplier 查詢方法 * @param <T> 類型對(duì)象 * @return 結(jié)果集 */ public static <T> PageInfo<T> pageQuery(Supplier<List<T>> supplier) { ServletRequestAttributes attributes = (ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes(), "無(wú)法獲取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 頁(yè)號(hào) * @param pageSize 每頁(yè)數(shù)據(jù)大小 * @param <T> 類型 * @return 結(jié)果集 */ 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> 類型對(duì)象 * @return 結(jié)果集 */ public static <T> List<T> pQuery(Supplier<List<T>> supplier) { ServletRequestAttributes attributes = (ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes(), "無(wú)法獲取request"); com.github.pagehelper.PageHelper.startPage(attributes.getRequest()); //======================== return supplier.get(); } /** * @param pageNum 頁(yè)號(hào) * @param pageSize 每頁(yè)數(shù)據(jù)大小 * @param <T> 類型 * @return 結(jié)果集 */ 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(); } }
第二種
這種方法是我第一次使用,把入?yún)⒌膒age和size封裝成了對(duì)象PageDomain
PageDomain代碼如下
@Data public class PageDomain1 { /** * 當(dāng)前頁(yè) */ private Integer page = 1; /** * 每頁(yè)數(shù)量 */ private Integer limit = 10; /** * 獲取開始的數(shù)據(jù)行 */ public Integer start() { return (this.page - 1) * this.limit; } /** * 獲取結(jié)束的數(shù)據(jù)行 */ public Integer end() { return this.page * this.limit; } }
?這是控制層代碼
?這是實(shí)現(xiàn)層代碼,這里的resultList,是我們先從數(shù)據(jù)庫(kù)中查出來(lái)的結(jié)果集,再用PageUtils的Startpage方法進(jìn)行分頁(yè)操作,最后組裝PageInfo返回體
下面是PageUtils的代碼
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-461785.html
?
到了這里,關(guān)于Java分頁(yè)查詢的幾種實(shí)現(xiàn)方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!