分頁攔截器的實現(xiàn)思路:
a)我們希望在原始查詢語句執(zhí)行前麦射,對語句進(jìn)行變更准给,加上limit 0,10類似的語句摹迷。Mybatis在執(zhí)行Sql之前會產(chǎn)生Statement對象宵凌,所以我們可以在它生成Statement對象前對Sql語句改造供搀。
b)在Mybatis中Statement語句是通過RoutingStatementHandler對象的prepare方法生成的隅居。分頁攔截器的思路就是攔截StatementHandler接口的prepare方法,在攔截器方法中把Sql語句改造成分頁查詢Sql語句趁曼,然后再調(diào)用StatementHandler對象的prepare方法军浆,也就是調(diào)用invocation.proceed()。
c)做分頁當(dāng)然需要先統(tǒng)計出記錄的總數(shù)挡闰,然后計算出總共有多少頁乒融。所以,在攔截器里面還需要統(tǒng)計滿足當(dāng)前查詢條件的記錄一共有多少摄悯。這就需要在獲取到原始的Sql語句后赞季,修改為對應(yīng)的統(tǒng)計語句比如:select count(*) from
tablename,之后再執(zhí)行該記錄統(tǒng)計的Sql語句進(jìn)行總記錄數(shù)的查詢奢驯。