StatementHandler

在MyBatis中,sql

  • Configuration對象會採用new RoutingStatementHandler()來生成StatementHandler對象,
    • 換句話說咱們真正使用的是RoutingStatementHandler對象,
    • 而後它會根據Executor的類型去建立對應具體的statementHandler對象
      • SimpleStatementHandlerPreparedStatementHandlerCallableStatementHandler)。

而後利用具體statementHandler的方法完成所須要的功能。插件

  • 那麼這個具體的statementHandler是保存在RoutingStatementHandler對象的delegate屬性的,
  • 因此當咱們攔截statementHandler的時候就要經常訪問它了。它們的關係以下圖所示。

StatementHandler是MyBatis四大對象裏面最重要的對象,它的方法是十分重要的,也是咱們插件的基礎。對象

  • 當咱們須要改變sql的時候,
    • 顯然咱們要在預編譯SQL(prepare方法前加入修改的邏輯)。
  • 當咱們須要修改參數的時候
    • 咱們能夠在調用parameterize方法前修改邏輯。
    • 或者使用ParameterHandler來改造設置參數。
  • 咱們須要控制組裝結果集的時候,
    • 也能夠在query方法先後加入邏輯,
    • 或者使用ResultHandler來改造組裝結果。
  • 懂的這些方法,才能理解我須要攔截什麼對象,如何處理插件,這是MyBatis的核心內容。  
相關文章
相關標籤/搜索