1. 程式人生 > >JDBC-Mybatis

JDBC-Mybatis

關鍵字:

SqlSessionFactory 和 Sqlsesion(一個事務的開始)
資料來源                    會話獨享 一個sqlsession 就是一個連線
jdbc 和 mybatis exectuor 執行preperstatemen  t 反射 代理 單例
物件關係對映半orm框架

JDBC和mybatis(純屬個人理解)
jdbc 是Java DataBase Connnection Java資料庫連線。
Mybatis 是JDBC的封裝 是一種半自動的orm框架。
首先我們看一下Jdbc在Java應用程式和資料庫是怎麼一個處理過程
就是一個Java應用程式需要資料庫中的資料時,怎麼去操作。
1.首先載入JDBC驅動,不管你是連線Mysql還是連線Oracle。
載入mysql的驅動 “com.jdbc.mysql.driver”
載入oracle的驅動 “jdbc.oracle.oracleDriver”
2.建立資料來源,返回一個connection物件,也就是Java與資料來源建立連線。此時需要url以及使用者名稱和密碼
在mysql資料庫 一般的url是這樣的 jdbc://mysql:localhost/3306/democ” democ 就是你的目標資料庫 
在oracle資料庫 url “”
3.連線建立完成之後,對資料庫中的表進行DML操作。
4.斷開連線。
以上就是整個過程。
但是存在如下的幾個問題,特別重要。
1.就是查詢的資料如何處理,一般的我們把資料表看做是一個類, 資料表中的一行資料就是一個物件。
這樣的我們就可以使用POJO來完成對結果的暫時儲存。
2.對於不同資料表來說,我在執行全查詢的時候,雖然都是全查詢但是處理的表的物件時不一樣的。比如說:
我對A表要進行全查詢,我就需要一個方法來完成對A表查詢這個操作。同時我現在要對B表進行全查詢,
此時我就需要一個方法來完成對B表查詢到這個操作。又來一個C表,又得有一個方法。這樣的處理方式程式碼沒有可重用性,
而且方法臃腫。
3.每個方法的結果你需要手動來完成解析,你要對結果進行封裝或者其他操作。
Mybatis
這個orm框架為我們解決了很多的事情。
1.config.xml 這個配置檔案為我們解決了關於建立資料來源的問題,
SqlSessionFactory 這樣的一個sql會話工長為我們解決了資料來源的問題,你不需要使用程式碼在去自己建立連線關閉連線。
2.sqlsession 一個sqlsession就是一個連線,他會有一個connection的物件,解決了連線的問題。
3.還有一個xml就是XXmapeer.xml(Sql),這個xml專注Sql,你只需要把你的Sql程式碼寫好就行,如何執行,礦建也會幫你完成。
4.session.getMapper(XXX.class)---session是sqlsession的一個物件,呼叫getMapper 通過反射機制,代理模式,會生成一個
XXX.class介面的代理物件。
這個代理物件為我們處理了很多事情。 你要執行sql語句,你就必須有sql語句,在哪?在XXXmapper.xml中,通過代理物件的方法名,把方法名當做ID在XXXmapper.xml
中查詢,找到之後提取其中的SQL語句,這個就是我們程式首先要做的,提取對應方法的SQL語句。在一個你要執行,
就要呼叫執行的方法,在JDBC中是通過類似於connection.Preperstatemnt(sql)完成的,而在原始碼中我們可以看到,session.
insert(functionName,param),這種方式是在沒有使用介面的情況下,我們手動呼叫,在使用介面的情況下,實際上是封裝了這一個操作。這樣代理物件就幫我們完成了這些工作,當你使用代理物件呼叫某個介面的方法的時候就執行了這一些列操作。
為什麼說mybatis是半自動的?
實際上在我們進行XML中進行sql語句的編寫時候,一般情況下根據條件做一些的DML操作,此時,傳遞的引數可以使基本資料型別,也可以是POJO,POJO和資料表會對映,只是如果你要讓框架幫你完成這些對映操作,那麼你的POJO物件就必須屬性名與資料表的欄位名一樣,不考慮大小寫,這樣框架根據get,set方法,獲取到物件的具體值,然後替換SQL語句中的引數部分。
但是如果我們的POJO和資料表的欄位名稱不一樣呢! 那麼就需要我們手動進行物件關係對映。