分页拦截器的实现思路:code
a) 咱们但愿在原始查询语句执行前,对语句进行变动,加上limit 0,10相似的语句。Mybatis在执行Sql以前会产生Statement对象,因此咱们能够在它生成Statement对象前对Sql语句改造。对象
b) 在Mybatis中Statement语句是经过RoutingStatementHandler对象的prepare方法生成的。分页拦截器的思路就是拦截StatementHandler接口的prepare方法,在拦截器方法中把Sql语句改形成分页查询Sql语句,而后再调用StatementHandler对象的prepare方法,也就是调用invocation.proceed()。接口
c) 作分页固然须要先统计出记录的总数,而后计算出总共有多少页。因此,在拦截器里面还须要统计知足当前查询条件的记录一共有多少。这就须要在获取到原始的Sql语句后,修改成对应的统计语句好比:select count(*) from tablename,以后再执行该记录统计的Sql语句进行总记录数的查询。get