一个注解就能搞定分页,为何你的却那么复杂
一个java程序员都避免不了增删改查,最近这几天又开始去写增删改查的接口了。这个时候就避免不了做数据的分页。
所以这几天写下来发现,即使使用了 pagehelper 分页插件,去对数据物理分页。虽然 pagehelper 插件使用起来很简单了。
但是我是个非常懒的程序员,多一行非业务相关的代码,我都不想写。 一个函数下来,被来业务程序就四五行,一顿操作下来非业务代码都占用了3份1。我是非常不能接受这些无相关业务太多的代码嵌入到函数中的。
其中一点就是:代码阅读起来不清晰,代码结构冗余,我特别喜欢看即简洁,条理又清晰的的。
所以自己就封装了一个 基于 pagehelper 上分页工具使用,即简洁,使用又方便。
1、思路
使用Spring拦截器和aspectj的作用,MethodInterceptor.java 去做Mapper接口的拦截,然后对要分页的方法加上 自定义分页注解 @StartPage
,在拦截到该方法的时候就,方法执行前,利用 **pagehelper.startPage()**进行分页,然后继续执行该方法,将查询结果封装到Page里面。即可实现分页拦截,在不修改 pagehelper 的操作上。这样子就避免了,在也service层的业务中去写这个一个多余的代码。
还避免了,在业务的service函数中,出现误操作,提前执行了 PageHelper.start()方法。导致真正的分页方法不生效了。
比如:
1 | java复制代码PageHelper.start(1,10); |
如上这种情况 userMaper.selectList(); 是需要分页的数据,但是在此之前执行了 cityMapper.selectById(id); 所以这个时候 cityMapper.selectById(id); 生效了。userMaper.selectList();分页 不生效。
使用这种注解方式,就不需要管这种情况,因为分页处理直接是在 当前mapper函数上处理了。
1、新建一个SpringBoot项目,将其做成一个starter。
2、相关文件介绍
封装一个 分页对象:
- 1、Page.java
1 | java复制代码public class Page<T> implements IPage<T> |
- OrderBy: 排序查询对象
1 | java复制代码/** |
- PageHelperAutoConfiguration.java SpringBoot自动配置类,starter的关键操纵
1 | java复制代码@Configuration |
- PageHelperProperties.java 就是读取 PageHelper 插件的配置类的。属性如下:
- PageHelperConfig.java 自定义配置类,主要是配置 Spring的增强类 DefaultPointcutAdvisor
1 | java复制代码/** |
- PageMethodInterceptor.java 重点:拦截器
1 | JAVA复制代码 /** |
- @StartPage.java 分页注解
1 | java复制代码/** |
……
项目搭建完毕! 将项目达成一个 jar文件引入到另外一个SpringBoot项目中。
3、使用
在另外一个项目中使用。
1 | java复制代码 <dependency> |
1、pagehelper配置文件
1 | yaml复制代码# 如下的配置文件都除了多增加一个 mapper-package 属性外,其他的一切 pagehelper 的配置都保持原有的功能。 |
2、在CityMapper.java中的方法加上 注解@StartPage
1 | java复制代码/** |
3、Service、Controller中使用
1 | java复制代码public interface ICityService |
CityServiceImpl.java
1 | java复制代码@Service |
SpringController.java
1 | java复制代码/** |
controller 中的使用,为了更加将分页参数与查询参数分离开。抽取一个共用的BaseController 也可以将封装好统一的返回对象给客户端,这样子即规范统一又好管理,简洁又方便。还可以放一些当前用户的信息啥的….
所以 BaseController.java 负责获取分页参数和封装好分页对象。包括统一响应客户端的对象,不用特意去 new一个对象了直接重父类拿
1 | java复制代码public class BaseController<T> |
4、验证分页结果
项目启动访问获取数据。
- list 接口
拦截器已经生效。
- list3带参数的分页注解分页
使用结束了,一个注解就能简单的搞定分页操作,mysql的分页操作。你还在写多那几行非业务相关的代码吗????
当然,如果不使用该注解分页方式也可使用 PageHelper 的方式进行分页。两不冲突。引入到你的项目中根据自己需要定制自己的一套规则。没有固定死的,合适你的项目的就是好的。
因为我懒,所以我就爱动脑爱动手,减轻开发中的痛苦,去写一个更加适合我个人开发的组建,抽离开来,方便以后个人使用便捷,不需要重复去写。直接引用这一套代码即可,更能提升个人开发的效率。
如上代 码可完善地方很多,感兴趣的,可以将其继续扩展使用学习使用…
如果公司让你封装一个分页插件的使用,你会怎么去封装一个???
更多PageHelper的使用方式,请移步官网
本文转载自: 掘金