基于若依(Ruoyi)的自动分页工具代码(简化版)

1.需要的技术

1.引入依赖 pagehelper-spring-boot-starter

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

2.具体实现代码

1.具体代码,这里为了方便,把所有的类都写在一个类里了

package com.cloud.account.util;

import cn.hutool.core.convert.Convert;
import cn.hutool.http.HttpStatus;
import com.alibaba.nacos.common.utils.StringUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * file:PageUtils.class
 * function:
 *
 * @author shaodan wang
 * @date 2024-08-21
 */

public class PageUtils {
    /**
     * 设置请求分页数据
     */
    public static void startPage() {
        clearPage();
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        Boolean reasonable = pageDomain.getReasonable();
        PageHelper.startPage(pageNum, pageSize).setReasonable(reasonable);
    }

    /**
     * 清理分页的线程变量
     */
    public static void clearPage() {
        PageHelper.clearPage();
    }


    /**
     * 响应请求分页数据
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    public static TableDataInfo getDataTable(List<?> list) {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.HTTP_OK);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }


    public static class TableSupport {
        /**
         * 当前记录起始索引
         */
        public static final String PAGE_NUM = "pageNum";

        /**
         * 每页显示记录数
         */
        public static final String PAGE_SIZE = "pageSize";

        /**
         * 排序列
         */
        public static final String ORDER_BY_COLUMN = "orderByColumn";

        /**
         * 排序的方向 "desc" 或者 "asc".
         */
        public static final String IS_ASC = "isAsc";

        /**
         * 分页参数合理化
         */
        public static final String REASONABLE = "reasonable";

        /**
         * 封装分页对象
         */
        public static PageDomain getPageDomain() {
            PageDomain pageDomain = new PageDomain();
            pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
            pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
            pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
            pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
            pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
            return pageDomain;
        }

        public static ServletRequestAttributes getRequestAttributes() {
            RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
            return (ServletRequestAttributes) attributes;
        }

        public static PageDomain buildPageRequest() {
            return getPageDomain();
        }
    }


    private static class ServletUtils {
        /**
         * 获取String参数
         */
        public static String getParameter(String name) {
            return getRequest().getParameter(name);
        }


        /**
         * 获取Boolean参数
         */
        public static Boolean getParameterToBool(String name) {
            return Convert.toBool(getRequest().getParameter(name));
        }


        /**
         * 获取request
         */
        public static HttpServletRequest getRequest() {
            return getRequestAttributes().getRequest();
        }


        public static ServletRequestAttributes getRequestAttributes() {
            RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
            return (ServletRequestAttributes) attributes;
        }

    }


    private static class PageDomain {

        /**
         * 当前记录起始索引
         */
        private Integer pageNum;

        /**
         * 每页显示记录数
         */
        private Integer pageSize;

        /**
         * 排序列
         */
        private String orderByColumn;

        /**
         * 排序的方向desc或者asc
         */
        private String isAsc = "asc";

        /**
         * 分页参数合理化
         */
        private Boolean reasonable = true;


        public Integer getPageNum() {
            return pageNum;
        }

        public void setPageNum(Integer pageNum) {
            this.pageNum = pageNum;
        }

        public Integer getPageSize() {
            return pageSize;
        }

        public void setPageSize(Integer pageSize) {
            this.pageSize = pageSize;
        }

        public String getOrderByColumn() {
            return orderByColumn;
        }

        public void setOrderByColumn(String orderByColumn) {
            this.orderByColumn = orderByColumn;
        }

        public String getIsAsc() {
            return isAsc;
        }

        public void setIsAsc(String isAsc) {
            if (StringUtils.isNotEmpty(isAsc)) {
                // 兼容前端排序类型
                if ("ascending".equals(isAsc)) {
                    isAsc = "asc";
                } else if ("descending".equals(isAsc)) {
                    isAsc = "desc";
                }
                this.isAsc = isAsc;
            }
        }

        public Boolean getReasonable() {
            if (reasonable == null) {
                return Boolean.TRUE;
            }
            return reasonable;
        }

        public void setReasonable(Boolean reasonable) {
            this.reasonable = reasonable;
        }
    }


}

2.返回的对象

package com.cloud.account.util;

import java.io.Serializable;
import java.util.List;

/**
 * 表格分页数据对象
 * 
 * @author wangshaodan
 */
public class TableDataInfo implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 总记录数 */
    private long total;

    /** 列表数据 */
    private List<?> rows;

    /** 消息状态码 */
    private int code;

    /** 消息内容 */
    private String msg;

    /**
     * 表格数据对象
     */
    public TableDataInfo()
    {
    }

    /**
     * 分页
     * 
     * @param list 列表数据
     * @param total 总记录数
     */
    public TableDataInfo(List<?> list, int total)
    {
        this.rows = list;
        this.total = total;
    }

    public long getTotal()
    {
        return total;
    }

    public void setTotal(long total)
    {
        this.total = total;
    }

    public List<?> getRows()
    {
        return rows;
    }

    public void setRows(List<?> rows)
    {
        this.rows = rows;
    }

    public int getCode()
    {
        return code;
    }

    public void setCode(int code)
    {
        this.code = code;
    }

    public String getMsg()
    {
        return msg;
    }

    public void setMsg(String msg)
    {
        this.msg = msg;
    }
}

3.具体使用

1.见下面


        PageUtils.startPage(); //开启分页
        List<MidDatabasePrivileges> midDatabasePrivilegesList = dataBasePrivilegesService.queryList(midDatabasePrivileges); //需要分页的sql
        //PageUtils.getDataTable(List<>....) 包装返回
        return Result.success(PageUtils.getDataTable(midDatabasePrivilegesList));

结束:

这个是根据ruoyi 进行简化使用的,一般的自定义sql,需要分页的,可以直接用这个,后端controller 不需要写pageNum pageSize 就能实现分页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值