分页的原理
1.计算总记录数
2.计算总页数
3.显示区间段的记录 即每页的数据
Mybatis在Dao层实现分页
使用拦截器在Dao层对mapper.xml文件中的sql进行拦截并将分页的的sql拼接上去,最后将拼接好的新的sql返回去。
什么是拦截器?
举个简单的例子:
比如说买票,可以自己去车站买,也可以找中间人去帮忙买,这里可以把这个中间人当作一个拦截器.中间人接收我的委托,去车站买票,买完后给我,这是一个常规的流程. 我自已去买票是Mybatis的正常流程,我找人代买票就是属于利用拦截器在Mybatis中添加了自己的行为,但同样达到了目的.
由此,总结出拦截其要做什么?
1.要实现拦截
2.拦截下来做什么事
3.事情做完后要交回主权
我们可以自定义拦截器实现拼接sql的步骤:
1自定义拦截器 注解
@Intercepts({}):标记当前的类是一个拦截器
@Signature(type=StatementHandler.class,method="prepare",args=
{Connection.class}
@Signature:标记了当前的拦截器只会拦截 StatementHandler(接口)中
的 prepare方法
因为这个方法的参数是 Connection类型的,所以需要使用args=
{Connection.class}来指定参数的类型
2继承Intercepetor接口,并重写其中的intercept方法,
首先要获取到mapper.xml,然后获取到要sql语句的id
判断id是否需要拦截
如需拦截,获取到sql语句,计算总的记录数,然后就是执行jdbc
重写分页的sql,将执行权交给下一个拦截器,如没有,则返回
具体代码如下:
image.png
image.png
以上就是自定义分页拦截器中的操作。
配置好拦截器后,要配置一个page.tag文件,分页的自定义标签库
image.png代码如下,这就是在网页上显示的分页格式:
image.png
在jsp页面引入这个自定义标签库:
image.png
image.png
当然,还有一些配置以及依赖
Mybatis.xml中添加如下代码
image.png在com.foreknow.util中要创建一个Page类,并设置分页需要的一些属性,代码如下:
image.png还要写一个计算总记录数的方法
image.png
然后就是属性生成的getter和setter
image.png
网友评论