現在公司項目裏都是使用mybatis,突然有一天,看到一個奇怪的現象,在controller、service和dao都沒有設置查詢的 limit x,y ,但是,放開sql打印,確確實實打印了limit語句,並且實際效果也是limit的。
嚇得我關了IDE,清了緩存,再試,居然還是一樣的。
奇了怪了,這個爲什麼會自動加上limit查詢呢?難道是mybatis新出的黑科技?但是,我看mybatis的版本,也才mybatis-spring-boot-starter 1.3.2,還是2018年3月份的,如果那個時候就出了,肯定網上資料一大堆啊,可我搜了關鍵字,也沒看到黑科技的信息。
沒辦法,只能本地下斷點,一點點F6,終於,發現了目標 PagePlugin 對象,PagePlugin實現了 mybatis的interceptor,點進去一看,原來,在執行select語句之前,會通過ParameterHandler進行參數攔截,自動給你加上limit 和算好的起始位置、size,還順帶把 count值計算了。
看來自己的知識面,還是不夠廣泛啊。。
ps:代碼就不貼了,網上一搜一大把