基于PageHelper自定义分页注解问题排查

文章介绍了如何在SpringAOP中使用EasyPoi实现数据分页和导出功能,包括自定义注解`@Pageable`,以及处理分页请求、导出Excel的详细步骤。同时提到了在使用PageHelper时需要注意的点,如拦截器行为和正确设置Page对象的总记录数。
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 可分页标识
 * <p>
 * 详情请参照 - PageableAop
 */
@SuppressWarnings("all")
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Pageable {

    /**
     * 自动触发分页 - 默认自动使用AOP进行分页
     * <p>
     * false表示不自动触发,
     * 即aop跳过分页逻辑及导出逻辑,并将相关分页参数存入线程变量中,
     * 同时,需要使用者显示调用AOP方法中的分页方法,在该方法中进行分页
     * <p>
     * 由于在复杂分页查询中,首次查询,一般不是目标查询,所以需要一种可手动调用的方式触发分页
     */
    boolean autoTrigger() default true;

    /**
     * 排序类型
     * <p>
     * asc 正序
     * <p>
     * desc 倒序
     */
    String sortType() default "asc";

    /**
     * 排序字段 - 可使用驼峰命名
     */
    String sortBy() default "id";

    /**
     * 可导出标识,则需要显式指定导出的实体类是什么
     */
    Excel exportable() default @Excel(Object.class);

    /**
     * Excel导出注解
     */
    @interface Excel {

        /**
         * 导出表实体类型
         */
        Class<?> value();

        /**
         * 设置文件名称
         */
        String file() default "file";

        /**
         * 设置标题,空则不设置
         */
        String title() default "";

        /**
         * 设置sheet名称
         */
        String sheet() default "";

        /**
         * 导出表实体类型
         */
        ExcelType excelType() default ExcelType.XSSF;

        /**
         * 是否需要表头,默认需要
         */
        boolean needHeader() default true;

        /**
         * 列宽自适应
         */
        boolean autoSize() default true;
    }
}


import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.hutool.core.lang.Pair;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.dialect.AbstractHelperDialect;
import com.ikas.ai.consts.Consts;
import com.ikas.ai.handle.JsonResult;
import com.ikas.ai.utils.NumUtil;
import com.ikas.ai.utils.PageUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;

@Component
@Aspect
@Slf4j
public class PageableAop {

    @Resource
    private HttpServletRequest request;
    @Resource
    private HttpServletResponse response;

 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值