All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.acyou.leo.framework.commons.PageQuery Maven / Gradle / Ivy

package cn.acyou.leo.framework.commons;

import cn.acyou.leo.framework.constant.CommonErrorEnum;
import cn.acyou.leo.framework.exception.ServiceException;
import cn.acyou.leo.framework.model.PageData;
import cn.acyou.leo.framework.model.PageSo;
import cn.acyou.leo.framework.util.BeanCopyUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.data.domain.Page;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 分页查询工具
 *
 * @author fangyou
 * @version [1.0.0, 2021-08-03 16:57]
 */
public class PageQuery {

    /**
     * 转换
     * 使用 springframework.data.domain.Page 时转换为 PageData
     *
     * 

example:

*
     * Page<ProductEo> users = productEsRepository.findAll(PageRequest.of(1, 20));
     * PageData<ProductEo> pageData = PageQuery.convert(user);
     * 
* * @param 数据类型 * @param springPage spring data的分页对象 * @return 分页数据 */ public static PageData convert(Page springPage) { Integer pageNum = springPage.getNumber() != 0 ? springPage.getNumber() : 1; PageData resultData = new PageData<>(pageNum, springPage.getSize()); resultData.setTotal(springPage.getTotalElements()); resultData.setList(springPage.getContent()); return resultData; } /** * 使用 PageHelper 时转换为 PageData * *

example:

*
     * PageHelper.startPage(req.getPageNum(), req.getPageSize());
     * List<MarketingProductVo> marketingProductList = marketingProductMapper.selectMarketingProduct(req);
     * PageData<MarketingProductVo> PageData = PageData.convert(new PageInfo<>(marketingProductList));
     * 
* * @param pageInfo pageHelper 分页对象 * @param 数据类型 * @return 分页数据 */ public static PageData convert(PageInfo pageInfo) { //这里没有数据的时候pageNum是0 Integer pageNum = pageInfo.getPageNum() != 0 ? pageInfo.getPageNum() : 1; PageData resultData = new PageData<>(pageNum, pageInfo.getPageSize()); resultData.setTotal(pageInfo.getTotal()); resultData.setList(pageInfo.getList()); return resultData; } /** * 使用 PageHelper 时转换为 PageData(包含类型转换) * * @param 目标类型 * @param pageInfo类型 * @param pageInfo 分页信息 * @param tarClass 目标类型Class * @return 分页数据 */ public static PageData convert(PageInfo pageInfo, Class tarClass) { //这里没有数据的时候pageNum是0 Integer pageNum = pageInfo.getPageNum() != 0 ? pageInfo.getPageNum() : 1; PageData resultData = new PageData<>(pageNum, pageInfo.getPageSize()); resultData.setTotal(pageInfo.getTotal()); resultData.setList(BeanCopyUtil.copyList(pageInfo.getList(), tarClass)); return resultData; } /** * 提供方法:使用pageHelper时 转 PageData * *

example:

*
     * PageHelper.startPage(req.getPageNum(), req.getPageSize());
     * List<MarketingProductVo> marketingProductList = marketingProductMapper.selectMarketingProduct(req);
     * PageData<MarketingProductVo> PageData = PageQuery.convert(marketingProductList);
     * 
* * @param 具体类型 * @param dataList dataList 数据List * @return 分页数据 */ public static PageData convert(List dataList) { PageInfo pageInfo = new PageInfo<>(dataList); return convert(pageInfo); } /** * 开启分页 * * 配合:{@link #selectMapper 使用} *

example:

* *
     *  PageData<Student> page1 =  PageData.startPage(pageNum, pageSize)
     *                 .selectMapper(studentService.selectAll());
     *  PageData<StudentVo> page2 =  PageData.startPage(pageNum, pageSize)
     *                 .selectMapper(studentService.selectAll(), StudentVo.class);
     * 
* * @param pageNum 页码,从1开始 * @param pageSize 页面大小 * @return 开启查询 */ public static PageQuery startPage(Integer pageNum, Integer pageSize) { judgeNotNull(pageNum, pageSize); PageHelper.startPage(pageNum, pageSize); return new PageQuery(); } /** * 参考: {@link #startPage(Integer, Integer)} * * @param pageNum 页码,从1开始 * @param pageSize 页面大小 * @param pageSizeZero true 时支持pageSize=0查全部 * false 时pageSize=0没有结果 * null 时用按照默认{false}配置 * @return 开启查询 */ public static PageQuery startPage(Integer pageNum, Integer pageSize, Boolean pageSizeZero) { judgeNotNull(pageNum, pageSize); PageHelper.startPage(pageNum, pageSize, true, null, pageSizeZero); return new PageQuery(); } /** * 参考: {@link #startPage(Integer, Integer)} * * @param pageNum 页码,从1开始 * @param pageSize 页面大小 * @param orderBy 排序 * @return 开启查询 */ public static PageQuery startPage(Integer pageNum, Integer pageSize, String orderBy) { judgeNotNull(pageNum, pageSize); PageHelper.startPage(pageNum, pageSize, orderBy); return new PageQuery(); } /** * 参考: {@link #startPage(Integer, Integer)} * * @param pageSo 分页参数 * @return 开启查询 */ public static PageQuery startPage(PageSo pageSo) { return startPage(pageSo.getPageNum(), pageSo.getPageSize(), convertOrderBy(pageSo)); } /** * 参考: {@link #startPage(Integer, Integer)} * * @param pageSo 分页参数 * @param pageSizeZero true 时支持pageSize=0查全部 * false 时pageSize=0没有结果 * null 时用按照默认{false}配置 * @return 开启查询 */ public static PageQuery startPage(PageSo pageSo, Boolean pageSizeZero) { judgeNotNull(pageSo.getPageNum(), pageSo.getPageSize()); PageHelper.startPage(pageSo.getPageNum(), pageSo.getPageSize(), true, null, pageSizeZero); PageHelper.orderBy(convertOrderBy(pageSo)); return new PageQuery(); } /** * 执行查询 * * @param queryList 查询结果 * @param 泛型 * @return 分页数据 */ public PageData selectMapper(List queryList) { PageInfo pageInfo = new PageInfo<>(queryList); return convert(pageInfo); } /** * 执行查询(包含类型转换) * * @param 目标类型 * @param 结果类型 * @param queryList 查询结果 * @param tarClass 模板类型 * @return 分页数据 */ public PageData selectMapper(List queryList, Class tarClass) { PageInfo pageInfo = new PageInfo<>(queryList); return convert(pageInfo, tarClass); } /** * 返回空分页 * @return 空分页数据 */ public static PageData empty() { PageData pageData = new PageData<>(1, 10); pageData.setTotal(0L); return pageData; } /** * 返回空分页 (根据 分页大小) * @param pageSize 分页大小 * @return 空分页数据 */ public static PageData empty(int pageSize) { PageData pageData = new PageData<>(1, pageSize); pageData.setTotal(0L); return pageData; } /** * 判断非空 * * @param pageNum 页面num * @param pageSize 页面大小 */ private static void judgeNotNull(Integer pageNum, Integer pageSize) { if (pageNum == null) { throw new ServiceException("[pageNum]不能为空!"); } if (pageSize == null) { throw new ServiceException("[pageSize]不能为空!"); } } /** * 转换为OrderBy 条件 * *

示例: createTime-desc,roleCode-asc

* * @param pageSo 分页参数 * @return order by sql */ public static String convertOrderBy(PageSo pageSo) { List orderBySqlList = new ArrayList<>(); Map supportFieldMap = pageSo.supportField(); String sortsStr = pageSo.getSorts(); //非法的sort参数 boolean illegalOrderBy = false; if (StringUtils.hasText(sortsStr) && (supportFieldMap != null && !supportFieldMap.isEmpty())) { Set supportKeys = supportFieldMap.keySet(); String[] orderItems = sortsStr.split(","); for (String orderItem : orderItems) { String[] split = orderItem.split("-"); if (split.length % 2 == 0) { String key = split[0]; String type = split[1]; if (StringUtils.hasText(key) && StringUtils.hasText(type) && supportKeys.contains(key) && isOrderByType(type)) { orderBySqlList.add(supportFieldMap.get(key) + " " + type.toLowerCase()); } else { illegalOrderBy = true; } } else { illegalOrderBy = true; } } } if (illegalOrderBy) { throw new ServiceException(CommonErrorEnum.E_INVALID_SORT_PARAMETER); } if (!orderBySqlList.isEmpty()) { return StringUtils.collectionToDelimitedString(orderBySqlList, ", "); } return null; } /** * 是排序类型 * * @param type 类型 * @return boolean */ private static boolean isOrderByType(String type) { return OrderBySymbols.asc.name().equalsIgnoreCase(type) || OrderBySymbols.desc.name().equalsIgnoreCase(type); } /** * order by符号 */ private enum OrderBySymbols { /** * 正序 */ asc, /** * 倒序 */ desc } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy