ibatis源碼
㈠ mybatis和ibatis的區別
1、基本信息不同
mybatis:MyBatis 是一款優秀的持久層框架,它支持定製化 sql、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。
MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將介面和 java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成資料庫中的記錄。
ibatis:iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO),同時還提供一個利用這個框架開發的JPetStore實例。相對Hibernate和ApacheOJB等「一站式」ORM解決方案而言,ibatis 是一種「半自動化」的ORM實現。
iBATIS 目前提供了三種語言實現的版本,包括:Java、.NET以及Ruby。
2、開發時間不同
mybatis:MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。
ibatis:iBATIS一詞來源於「internet」和「abatis」的組合,是一個由Clinton Begin在2001年發起的開放源代碼項目。
3、配置方法不同
mybatis簡化了編碼的過程,不需要去寫的實現類,直接寫一個的介面,再寫一個xml配置文件,整個mybatis就配置好了,也就是資料庫就連接好了,然後在service裡面直接調用就可以了,但是ibatis則不可以,必須要寫的實現類。mybatis是ibatis的升級版本。
㈡ spring 怎麼管理ibatis的session,spring事務管理後 會關閉session么在源碼中怎麼查看
首先要明白spring為什麼要管理session?session是在什麼時候使用的?以及為什麼要管理?
1、spring其實管理的是sessionFactory對象,很明顯這個對象是用來獲取session的。在spring上下文全局中應該只有一個,這個不用擔心因為默認情況下spring都是管理bean都是單例的。
2、session是線程不安全的,因此我們使用的是時候應當使用局部變數的方式使用。也就是方法體內使用
3、先看圖
可能你覺得這個比較發麻,這么簡單的一個方法我手動控制就好了!但是實際應用當中可能你這個業務方法還調用其他的業務方法,那時候你這個事務要怎麼控制,是全部寫在一個try-catch裡面還是怎麼處理?
㈢ mybatis怎麼實現兩種資料庫的兼容
方法:在系統運行過程中,針對不同資料庫類型區分載入不同文件路徑下的sqlmap配置。留給開發人員做的事依舊是快樂地編寫原始資料庫語句,而不再為多資料庫兼容問題撓頭。
分析問題:
1、解決ibatis多資料庫兼容的問題,實際上就是讓ibatis可以自動選擇不同資料庫sqlmap配置文件。
2、打開ibatis源碼工程並進行代碼跟蹤,最終定位到com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.java處,系統中運行的sqlmap節點均從這里統一轉化載入的。
3、很明顯SqlMapConfigParser源碼中的addSqlMapNodelets負責解析「/sqlMapConfig/sqlMap」路徑,即也就是sqlmap文件路徑。
4、要實現「多資料庫兼容」,這里改造下這個方法即可。
解決方法:
1、首選我們在<setting>節點新增一個「DBProctName」用於判斷資料庫種類。當然通過java.sql.DatabaseMetaData也可以獲得,但這太依賴於jdbc驅動,還是手動配置保險。
2、重構SqlMapConfigParser的addSqlMapNodelets方法。
" 1)首選獲得單個sqlmap文件的位置,如 sqlmap主目錄\XXX.xml;
2)依據上面設置的DBProctName屬性值獲得資料庫類型;
3)將sqlmap的文件路徑重定位到運行資料庫類型文件下。如 sqlmap主目錄\mysql\XXX.xml,代表程序當前運行於msql資料庫上,並載入系統mysql資料庫對應的 sqlmap文件"
4、ok,現在ibatis支持「多資料庫兼容」了(完整源碼見附件)。
使用方法:
1、編譯SqlMapConfigParser.java生成可運行文件SqlMapConfigParser.class(見附件),並將其覆蓋添加到ibatis.jar中。
2、在系統sqlmap配置文件存放主目錄如src\conf\mapping添加多資料庫兼容支持的子目錄,如src\conf\mapping\mysql,src\conf\mapping\oracle等
3、以實際項目需要編寫多資料庫sqlmap配置文件。注意:不同資料庫類型需要確保具有相同的sqlmap配置文件名和sql節點名
4、在ibatis主配置文件(如sql-map-config.xml)中,<setting>指定當前程序運行資料庫類型