mybatis四大物件指的是:executor,statementhandler,parameterhandler和resulthandler物件。這四個物件在sqlsession內部共同協作完成sql語句的執行,同時也是我們自定義外掛程式攔截的四大物件。
sqlsession 首先會呼叫executor.query方法執行查詢。
mybatis生產executor的關鍵**如下:
public object pluginall(object target)
return target;
}
此處採用責任鏈與jdk動態**模式結合的方式,遍歷的interceptor 即遍歷mybatis的***。責任鏈模式可理解為若干***物件組成一條攔截鍊錶,請求在這個攔截鍊錶一直傳遞,直到鏈上的某一***物件處理此請求,這一模式在servlet的filter和dubbo的filter有用到。不同的是,mybatis責任鏈則是通過動態**的方式,使用plugin**實際的executor類,即plugin(plugin(…(executor)))。
public
class
plugin
implements
invocationhandler
return method.invoke(target, args);
}//對傳入的物件進行**,可能是實際的executor類,也可能是plugin**類
public
static object wrap(object target, interceptor interceptor)
return target;
}}
executor在doquery時生成statementhandler物件
在mybatis實現了statementhandler的有四個類:
routingstatementhandler,這是乙個封裝類,它不提供具體的實現,只是根據executor的型別,建立不同的型別statementhandler。
******statementhandler,這個類對應於jdbc的statement物件,用於沒有預編譯引數的sql的執行。
preparedstatementhandler 這個用於預編譯引數sql的執行。
callablestatementhandler 它將實儲存過程的排程。
statementhandler的主要方法:
prepare:編譯sql
parameterize:prepare後設定引數
query/update:sql執行
基於statementhandler物件定義的外掛程式:
修改sql語句則在預編譯sql(prepare方法前)操作。
修改引數則在呼叫parameterize方法前修改邏輯。或者使用parameterhandler來改造設定引數。
組裝結果集則在query方法前後加入邏輯,或者使用resulthandler來改造組裝結果。
MyBatis四大物件及外掛程式原理
1.四大物件 parameterhandler 處理sql的引數物件 statementhandler 資料庫的處理物件,用於執行sql語句 executor mybatis的執行器,用於執行增刪改查操作 resultsethandler 處理sql的返回結果集 追蹤四大物件的原始碼 org.apa...
JSP四大域物件
web開發中的四個域物件 有 範圍小到大 page jsp有效 page 域指的是 pagecontext.request 一次請求 request 域指的是 session 一次會話 session 域指的是 web應用域指的是 之所以他們是域物件,原因就是他們都內建了map 集合,都有 seta...
Java四大域物件
1.生命週期 當web應用被載入進容器建立代表整個web應用的servletcontext物件,當伺服器關閉或web應用被移除時,servletcontext物件跟著被銷毀。2.作用範圍 整個web應用。3.在不同servlet之間 讀取資源檔案1.生命週期 在service方法呼叫前由伺服器建立,...