分析問題:
1.要解決ibatis多數據庫兼容的問題,實際上ibatis可以自動選擇不同數據庫的sqlmap配置文件。
2.打開ibatis源代碼項目並跟蹤代碼,最後在com找到它。ibatis.sqlmap.engine.builder.xml.sqlmapconfigparser.java,系統中運行的所有sqlmap節點都從這裏統壹轉換和加載。
3.很明顯,SqlMapConfigParser源代碼中的addSqlMapNodelets負責解析“/sqlMapConfig/sqlMap”路徑,即sqlMap文件路徑。
4.要實現“多數據庫兼容”,只需在這裏轉換此方法。
解決方案:
1,首選是我們在
2.重新構造SqlMapConfigParser的addSqlMapNodelets方法。
“1)最好獲取單個sqlmap文件的位置,如sqlmap主目錄\ xxx.xml
2)根據上面設置的DBProductName屬性值獲取數據庫類型;
3)將sqlmap的文件路徑重新定位到正在運行的數據庫類型文件。例如,sqlmap主目錄\mysql\XXX.xml表示程序當前正在msql數據庫上運行,並加載與系統的mysql數據庫對應的sqlmap文件。"
4.好了,現在ibatis支持“多數據庫兼容性”(完整源代碼見附件)。
如何使用:
1.編譯SqlMapConfigParser.class生成的可執行文件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 & gt指定當前程序運行的數據庫類型。