分頁攔截器的實現思路: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