MyBatis拦截器分页原理及PageHelper分页插件教学

闲来无事,特地整理了一下MyBatis拦截器实现分页的原理。

地球人应该都知道要利用JDBC对数据库进行操作,就需要一个statement对象,MyBatis也是如此。MyBatis在执行sql语句前会产生一个包含sql语句的Statement对象,而且对应的sql语句是在Statement之前产生的,所以我们就可以在MyBatis生成Statement之前对这个sql下手,分页本质上是sql limit去获取数据,所以只要我们在此对sql进行改造,就可以达到分页的目的。那么MyBatis拦截器是怎么做到分页的呢?

在Mybatis中Statement语句是通过RoutingStatementHandler对象的prepare方法生成的。所以利用拦截器实现Mybatis分页的一个思路就是拦截StatementHandler接口的prepare方法,然后在拦截器方法中把Sql语句改成对应的分页查询Sql语句,之后再调用StatementHandler对象的prepare方法,即调用invocation.proceed()。对于分页而言,在拦截器里面我们还需要做的一个操作就是统计满足当前条件的记录一共有多少,这是通过获取到了原始的Sql语句后,把它改为对应的统计语句再利用Mybatis封装好的参数和设置参数的功能把Sql语句中的参数进行替换,之后再执行查询记录数的Sql语句进行总记录数的统计。

如何在项目中使用呢?

下面安利一个分页插件。
PageHelper 已经在github上开源,可以自行搜索一下。

1.如果使用了maven,那么只要在pom.xml中引入该插件即可,引入如下:

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值