mybatis深入淺出——連接管理+sql映射+結果集轉換

本節主要對mybatis初始化源碼的分析,簡單的闡述mybatis的設計思想。

數據庫訪問相關的框架是對jdk中的數據庫訪問相關操作的更高層次的封裝,所以如果要探究一個框架的設計原理,那麼可以從下而上的進行分析。通過分析jdk中數據庫訪問的痛點,和分析mybatis的所解決的問題相結合,可以更加透徹的理解框架的意義,從而可以更加高效的使用好框架,更好的整合到項目當中。

大部分的數據庫訪問框架都需要解決下面三個基本的問題,本節將圍繞下面三個問題展開討論,對於和性能相關的更加深入的問題將在後續的章節討論。

1、數據庫連接管理
數據庫訪問需要建立數據庫連接(延伸:數據庫連接應該是建立socket之上的,並維護的數據庫訪問的相關的協議),在基於jdk的數據訪問中在配置好了driver信息之後,就可以通過driver獲取到連接了,然後執行sql語句並關閉連接。

由於連接的建立的底層是tcp的連接,所以這種方式會導致不斷的建立和關閉tcp連接,從而導致數據庫服務大量存在close_wait的tcp連接,當初與該狀態的tcp連接達到系統的限制之後,可能會導致服務器拒絕連接。

而且由於tcp連接本身是耗時的,所以上述就是爲什麼傳統的sql執行低效的原因。爲了避免這種情況開發人員想到了連接池的概念,通過連接池緩存未被使用的連接,從而提高性能。

關於mybatis的數據庫的連接池的實現,在上上章節已經講解了,本節就不再贅述。

2、sql語句的映射
在沒有使用框架的數據庫訪問中,需要自己編寫sql語句,而且在執行sql語句前後需要做很多的操作,所以很多框架通過對象的方式屏蔽了sql語句,但是底層仍然是基於sql的,只是通過獲取對象的property name來拼接sql的。

在mybatis中主要是通過註解和配置文件的方式來實現sql的映射,通過對註解或xml進行掃描並對註解的類的方法進行解析,從而可以完成sql和對象參數的綁定。

3、結果集的轉換
在執行完sql之後,jdk返回的是ResultSet,需要自己將字段的值和對象的屬性進行匹配,這個操作是複雜且容易出錯的,所以可以通過java反射機制來封裝從ResultSet到java對象的過程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章