1. 程式人生 > >mybatis的理解

mybatis的理解

Mybatis是一個應用比較廣泛的持久層框架,它原本是apache的一個開源專案 IBatis,2010年遷移到Google Code後改名得來的。


Mybatis主要是通過封裝JDBC的方法實現簡化資料庫與java之間的連線,它是一個不完全的ORM(物件關係對映) 框架,利用對映關係的方法簡易Java與SQL語句之間的相互轉化。它幾乎避免了所有JDBC程式碼和手動設定引數以及獲取結果集。Mybatis相當靈活,它是將SQL語句寫入XML檔案中,與程式程式碼完全分析,降低耦合度,便於管理,而且如果我們在專案中用到相同查詢的時候可以通過id多次呼叫這個SQL語句。當然Mybatis最大的特點就是支援動態SQL語句【動態標籤分別是:when ,choose ,where , otherwise(where可以自動生成AND 或者去掉AND) ,if ,set(SET 可以自動生成”,”或者去掉”,”) ,foreach 】的編寫和運用(#{} & ${})。它也提供了一些對映標籤,支援類與資料庫的ORM欄位關係對映,這裡需要注意的是類中的物件必須和列名保持一致。

但是Mybatis也不是完美的,它也有它的不完美的地方,SQL語句的編寫量特別大,尤其是欄位多、關聯表多時,這樣對開發人員對SQL語句編寫的要求很高。SQL語句依賴資料庫,會導致資料庫移植性差,而且不能隨便更換資料庫。


下面我們對Mybatis執行機制進行分析:

1.載入主配置檔案,Mybatis核心檔案,載入Mapper的對映檔案開始建立configuration物件
2.SqlSessionFactory 建立需要載入configuration物件
3.通過SqlSessionFactory 開啟一個SqlSession物件
4.執行MapperStatements維護一條<select/update/delete/insert>節點的封裝(id 傳入引數,返回型別 SQL語句)
【SqlSoure:負責根據使用者傳遞的Paramter Object動態生成SQL語句,將資訊封裝到BoundSql物件,並返回】
【BoundSql:負責動態生成的SQL語句以及相應的引數資訊】
5.SqlSession根據事務提交情況判斷,提交還是回滾。

這裡寫圖片描述


在這個過程中我們需要特別注意Mybatis的四大物件:

Exeutor:執行器,是Mybatis排程的核心,負責SQL語句的生成和查詢快取的維護

StatementHandle:封裝JDBC Statement操作,負責對JDBC Statement的操作,如:設定引數

ParameteHandle:負責對使用者傳遞的引數轉換成JDBC Statement所對應的資料型別

ResultHandle:負責將JDBC返回的ResultSet 結果集物件轉換成List型別的集合
(TypeHandle: 負責java資料型別和JDBC資料型別之間的對映和轉換)