MyBatis提供4個擴充點:
1、Executor執行器接口擴充點
用于執行一系列的SQL操作,底層是使用StatementHandler接口進行原子的SQL操作,Executor在StatementHandler之上進行了一層包裝,比如ReuseExecutor執行器,在上層包裝了對Statement的緩存,這樣達到一個性能提升的作用
2、StatementHandler擴充點
Statement接口是Java執行資料庫行為的重要接口,Mybatis的StatementHandler的實作,也正是對應Statement接口三個實作類(CallableStatement\PreparedStatement\Statement),實作類都是mysql驅動包裡的。
是以,StatementHandler是直接調用mysql驅動包實作對資料庫的增删改查操作,
3、ResultSetHandler擴充點
用于處理SQL的傳回結果
4、ParameterHandler擴充點
用于設定參數
5、擴充點原理
以上所有擴充點的方式都是通過InterceptorChain來設定的,底層使用的jdk動态代理
所有需要代理的類,通過調用pluginAll方法,傳入被代理的目标類對象,通過循環所有的interceptors攔截器
調用了wrap方法,該方法建立了代理對象Plugin類
是以代理類建立之後,所有的情況都會通過inovke方法, invoke方法則調用interceptor進行業務邏輯處理。
6、擴充執行個體
1、分頁插件pagehelper
分頁插件的實作原理,即是根據攔截Executor執行器,實作了Interceptor接口,在interceptor方法中寫分頁的業務邏輯