分页插件pagehelper杂谈

今天突然想研究公司的架构代码,发现了分页插件和以前使用的不一样,采用的是PageHelper的PageHelper.startPage 静态方法调用。

由于以前没有接触过这个分页插件,我一直再想分页插件是如何实现第一个查询sql分页,而后面的不分页,通过查看官方文档在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页才了解到。

仔细阅读了官方文档,发现这个分页插件对比以前我接触的各种插件来说,使用简单、代码逻辑量少、配置简单,因为项目采用了spring boot,前端访问的API都在一个包管理,所以我们对接口的名称也定义了一套规范,直接使用AOP拦截需要分页的接口,代码量可以说大大减少,对开发来说方便了很多。

贴上接口名称代码

// 参数为伪代码
public RespEntity findXXXPage(@RequestBody Object object) {
}

贴上AOP代码

@Around("execution(* com.vteam.sme.api.controller..find*Page(..))")
    public Object pageHandler(ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] args = joinPoint.getArgs();
        // 伪代码
        Object params = args[0];
        Assert.notNull(params.getPageNum(), "页码不能为空。");
        Assert.notNull(params.getPageSize(), "每页大小不能为空。");
        Page<Object> page = PageHelper.startPage(params.getPageNum(), params.getPageSize());
        // 处理业务逻辑
        Object object = joinPoint.proceed(args);
        // 设置总记录数
        BeanWrapper beanWrapper = new BeanWrapperImpl(object);
        beanWrapper.setPropertyValue("count", page.getTotal());
        return object;
    }

猜你喜欢

转载自blog.csdn.net/marke_huang/article/details/83587237