持久層框架mybatis

2021-09-12 12:33:39 字數 2177 閱讀 3395

本篇的中心內容,解決以下問題。

持久層框架mybatis篇與mybatis-plus使用

mybatis 是支援定製化 sql、儲存過程以及高階對映的優秀的持久層框架,其主要就完成:

構建sqlsessionfactory過程

對映器的動態**

sqlsession的4大物件

sql執行的過程

mybatis的主要設計目的就是讓我們對執行sql語句時對輸入輸出的資料管理更加方便,所以方便地寫出sql和方便地獲取sql的執行結果才是mybatis的核心競爭力。

構建主要分為2步:

說白了,就是將我們的所有配置解析為configuration物件,在整個生命週期內,可以通過該物件獲取需要的配置。

由於外掛程式需要頻繁訪問對映器的內部組成,會重點這部分,了解這塊配置抽象出來的物件:

它儲存對映器的乙個節點(select|insert|delete|update),包括配置的sql,sql的id、快取資訊、resultmap、parametertype、resulttype等重要配置內容。

它涉及的物件比較多,一般不去修改它。

對於引數和sql,主要反映在boundsql類物件上,在外掛程式中,通過它獲取到當前執行的sql和引數以及引數規則,作出適當的修改,滿足特殊的要求。

parameterobject為引數本身,可以傳遞簡單物件、pojo、map或@param註解的引數:

sql,是寫在對映器裡面的一條sql。

有了configuration物件,構建sqlsessionfactory就簡單了:

sqlsessionfactory = new sqlsessionfactorybuilder().bulid(inputstream);
sqlsession執行過程

對映器的動態**

.....

@override

public object invoke(object proxy, method method, object args) throws throwable else if (isdefaultmethod(method))

} catch (throwable t)

}}public object execute(sqlsession sqlsession, object args)

case update: }}

最後看下,生成**類的方法,就是使用jdk動態**proxy來建立的。

public t newinstance(sqlsession sqlsession)

@suppresswarnings("unchecked")

}}sqlsession下的四大物件

在mybatis中存在三種執行器:

以******executor為例,說明執行過程

public class ******executor extends baseexecutor  finally 

} /**

* 初始化statementhandler

*/private statement preparestatement(statementhandler handler, log statementlog) throws sqlexception

/*** 執行查詢

*/@override

public listquery(statement statement, resulthandler resulthandler) throws sqlexception

}

可以看到最後會委託給statementhandler會話器進行處理,它是乙個介面,實際建立的是routingstatementhandler物件,但它不是真實的服務物件,它是通過介面卡模式找到對應的statementhandler執行的。在mybatis中,statementhandler和executor一樣分為三種:******statementhandler、preparedstatementhandler、callablestatementhandler。

executor會先呼叫statementhandler的prepare方法預編譯sql語句,同時設定一些基本執行的引數。然後呼叫parameterize()方法啟用parameterhandler設定引數,完成預編譯,跟著執行查詢,用resulthandler封裝結果返回給呼叫者。

3 3 1 持久層框架 MyBatis入門

mybatis是優秀的持久層框架 mybatis使用xml將sql與程式解耦,便於維護 mybatis學習簡單,執行高效,是jdbc的延伸 引入mybatis依賴 建立實體類 初始化sessionfactory 利用sqlsession物件運算元據 sqlsession是mybatis運算元據庫的核...

java持久層框架mybatis如何防止sql注入

sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段,例如 or 1 1 這樣的語句,有可能入侵引數校驗不足的應用程式。所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為儲存...

java持久層框架mybatis如何防止sql注入

sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在介面的表單資訊或url上輸入一些奇怪的sql片段,例如 or 1 1 這樣的語句,有可能入侵引數校驗不足的應用程式。所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為儲存...