分頁攔截器的實現思路:
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語句進行總記錄數的查詢。