Appearance
PageHelper分页升级版-兼容MybatisPlus
1、改造统一返回值兼容 MybatisPlus
java
package com.xx.page.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Author: xueqimiao
* @Date: 2023/11/8 15:54
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NeedPage {
/**
* pageNo:页码
* pageSize:每页显示条数
* countFlag:是否进行count查询
*/
}
java
package com.xx.page.interceptor;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xx.page.context.PageData;
import com.xx.result.Result;
import com.xx.utils.PageDataUtil;
import com.xx.utils.ServletUtil;
import com.xx.utils.ValidationUtil;
import jakarta.servlet.http.HttpServletRequest;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Author: xueqimiao
* @Date: 2023/11/8 15:58
*/
@Component
@Aspect
public class PageDataInterceptor {
public Logger log = LoggerFactory.getLogger(PageDataInterceptor.class);
// 切入点
@Pointcut("@annotation(com.xx.page.annotation.NeedPage)")
public void controllerAspect() {
}
@Around("controllerAspect()")
public Result controllerAround(ProceedingJoinPoint proJoinPoint) throws Throwable {
log.info("==========> 开始执行PageHelper");
// 1、获取请求参数
HttpServletRequest request = ServletUtil.getHttpRequest();
int currentPage = getIntParameter(request, PageDataUtil.PAGE_CURRENT_PAGE_NO_STR, 1);
int pageSize = getIntParameter(request, PageDataUtil.PAGE_SIZE_STR, 10);
Page<Object> page = PageHelper.startPage(currentPage, pageSize);
return handlePage(proJoinPoint, page);
}
private Result handlePage(ProceedingJoinPoint proJoinPoint, Page<Object> page) throws Throwable {
Object retVal = proJoinPoint.proceed();
if (retVal == null || !(retVal instanceof Result)
|| !((Result) retVal).isSuccess()) {
return Result.ok(retVal);
}
Result returnResult = (Result) retVal;
if (!(returnResult.getResult() instanceof List)) {
return returnResult;
}
PageData pageData = new PageData();
Object result = returnResult.getResult();
pageData.setRecords(result);
PageInfo pageInfo = new PageInfo<>(page);
pageData.setSize(pageInfo.getPageSize());
pageData.setTotal(pageInfo.getTotal());
pageData.setPages(pageInfo.getPages());
pageData.setCurrent(pageInfo.getPageNum());
returnResult.setResult(pageData);
return returnResult;
}
private static int getIntParameter(HttpServletRequest request, String paramName, Integer defaultVal) {
String paramValue = request.getParameter(paramName);
if (ValidationUtil.isEmpty(paramValue)) {
return defaultVal;
}
return Integer.parseInt(paramValue);
}
}
2、PageHelper查询总记录数
java
/**
* 开始分页
*
* @param pageNum 页码
* @param pageSize 每页显示数量
* @param count 是否进行count查询
*/
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count) {
return startPage(pageNum, pageSize, count, null, null);
}
修改我们的注解
java
package com.xx.utils;
/**
* @Author: xueqimiao
* @Date: 2023/11/8 16:06
*/
public class PageDataUtil {
public static final String PAGE_CURRENT_PAGE_NO_STR = "pageNo";
public static final String PAGE_SIZE_STR = "pageSize";
public static final String COUNT_FLAG = "countFlag";
}
java
package com.xx.page.interceptor;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xx.page.context.PageData;
import com.xx.result.Result;
import com.xx.utils.PageDataUtil;
import com.xx.utils.ServletUtil;
import com.xx.utils.ValidationUtil;
import jakarta.servlet.http.HttpServletRequest;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Author: xueqimiao
* @Date: 2023/11/8 15:58
*/
@Component
@Aspect
public class PageDataInterceptor {
public Logger log = LoggerFactory.getLogger(PageDataInterceptor.class);
// 切入点
@Pointcut("@annotation(com.xx.page.annotation.NeedPage)")
public void controllerAspect() {
}
@Around("controllerAspect()")
public Result controllerAround(ProceedingJoinPoint proJoinPoint) throws Throwable {
log.info("==========> 开始执行PageHelper");
// 1、获取请求参数
HttpServletRequest request = ServletUtil.getHttpRequest();
int currentPage = getIntParameter(request, PageDataUtil.PAGE_CURRENT_PAGE_NO_STR, 1);
int pageSize = getIntParameter(request, PageDataUtil.PAGE_SIZE_STR, 10);
// 是否进行count查询
int count = getIntParameter(request, PageDataUtil.COUNT_FLAG, 1);
Page<Object> page = PageHelper.startPage(currentPage, pageSize, count == 1);
return handlePage(proJoinPoint, page);
}
private Result handlePage(ProceedingJoinPoint proJoinPoint, Page<Object> page) throws Throwable {
Object retVal = proJoinPoint.proceed();
if (retVal == null || !(retVal instanceof Result)
|| !((Result) retVal).isSuccess()) {
return Result.ok(retVal);
}
Result returnResult = (Result) retVal;
if (!(returnResult.getResult() instanceof List)) {
return returnResult;
}
PageData pageData = new PageData();
Object result = returnResult.getResult();
pageData.setRecords(result);
PageInfo pageInfo = new PageInfo<>(page);
pageData.setSize(pageInfo.getPageSize());
pageData.setTotal(pageInfo.getTotal());
pageData.setPages(pageInfo.getPages());
pageData.setCurrent(pageInfo.getPageNum());
returnResult.setResult(pageData);
return returnResult;
}
private static int getIntParameter(HttpServletRequest request, String paramName, Integer defaultVal) {
String paramValue = request.getParameter(paramName);
if (ValidationUtil.isEmpty(paramValue)) {
return defaultVal;
}
return Integer.parseInt(paramValue);
}
}
写在最后
让我们带着这份对技术的热爱与执着,继续前行吧。在探索的道路上,我们或许会疲惫,或许会迷失方向,但只要心中的信念之火不熄,我们定能穿越风雨,迎接那属于自己的技术之光。