一、概念
Hibernate 和 Apache OJB :“一站式”ORM
Ibatis:一種“半 自動化”的 ORM 實現,也就是說ibatis 不會為程式員在運行期自動產生 SQL 執行。具體的 SQL 需要程式員編寫,然後通過映 射設定檔,將 SQL 所需的參數,以及返回的結果欄位對應到指定 POJO。
二、使用
構建 ibatis 基礎代碼
ibatis 基礎程式碼封裝括:
1. ibatis 配置SqlMapConfig.xml檔案 :
(1)、Settings 節點
| 參數 |
描述 |
| cacheModelEnable |
是否啟用SqlMapClient上的緩衝機制。建議設為"true" |
| enhancementEnable |
是否針對POJO啟用位元組碼增強機制,避免java reflect的效能開銷 |
| errorTracingEnabled |
是否啟用錯誤記錄檔,開發期間可以開啟,方便調試 |
| lazyLoadingEnalbed |
是否啟用消極式載入 |
| maxRequests |
最大並發請求數(Statement 並發數) |
| maxTransactions |
最大並發事務數 |
| maxSessions |
最大Session數,及最大的並發SqlMapclient數,必須介於maxTransactions和maxRequest之間 |
(2)、transactionManager 事物管理
(3)、dataSource 資料來源配置
(4)、sqlMap 用於包括SQL Map對應檔和其他的SQL Map設定檔。每個SqlMapClient對象使用的所有SQL Map對應檔都要在此聲明。對應檔作為stream resource從類路徑或URL讀入。您必須在這裡指定所有的SQL Map檔案。
2、實體類POJO。這個需要和資料庫的相對應。
3、對應檔map,通常放在sqlmap包下,實現具體的資料庫動作陳述式。主要有模組配置、緩衝配置、statement配置。使用最多的應該是此處的statement配置了,需要用的sql語句和參數都寫在這裡。
4、如何在代碼中使用,這才是最關鍵的。
在此先要搞清楚幾個比較核心的比較重要的概念:
(1)、XmlSqlMapClientBuilder,ibatis 2.0 之後版本新引入的組件, 用以替代 1.x 版本中的 XmlSqlMapBuilder。其作用是根據設定檔建立 SqlMapClient 執行個體。
(2)、SqlMapClient 是 ibatis 的核心組件, 提供資料操作的基礎平台。
SqlMapClient 可通過 XmlSqlMapClientBuilder 建立:
String resource ="com/ibatis/sample/SqlMapConfig.xml";
Reader reader; reader = Resources.getResourceAsReader(resource);
XmlSqlMapClientBuilder xmlBuilder = new XmlSqlMapClientBuilder();
SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader);
備忘:"com/ibatis/sample/SqlMapConfig.xml"指明了設定檔在 CLASSPATH 中的相對路徑。 XmlSqlMapClientBuilder 通過接受一個 Reader 類型的配置文 件控制代碼,根據配置參數,建立 SqlMapClient 執行個體。 SqlMapClient 提供了眾多資料操作方法。
5、SqlMapClient 基本操作樣本
見Ibatis官方手冊
6、學習體會
大三用java做資料庫課程設計的時候將所有的資料庫操作都寫在一個類裡,程式的耦合性很高,擴充性也不好。Ibatis是我第一次接觸的,感覺學起來很容易上手,自己也學著在Demo上試了一下,做了個簡單的登陸介面。學習ibatis的過程最重要的是理解他的工作原理和映射關係,還有就是結合webx開發,哪些檔案應該放置在哪層(通常是DAO層),弄清楚這些問題,在以後的開發中肯定也是很有協助的。
實踐中遇到的問題:
無法連結資料庫,無法下載資料庫驅動,把jdbc.mysql.mysql-connector包複製到tomcat下面的lib目錄中即可。當然要保證你的xml配置是正確的,我串連本地Mysql的時候配置如下:
<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"value="com.mysql.jdbc.Driver"/>
<property name="url"value="jdbc:mysql://localhost:3306/bookmanager"/>
<property name="username"value="root"/>
<property name="password"value="admin"/>
</bean>