1. 在ibatis的配置文件中dataSource 節點有這么個配置<datasource type="SIMPLE"></datasource>,根據原文下的解釋知道其中type有SIMPLE,DBCP,JNDI三 種.我想問下這三種類型的區別在於哪里, 在什么情況下用到,常用的是哪個 ,及它的優點在於哪里?
看情況,simple用於測試,dbcp是采用dbcp做數據源,jndi是使用app server提供的數據源
一般來說,在實際應用中jndi用的比較多,simple用於測試
不過,多說了一句,dataSource一般都是在spring中創建或管理,所以和spring集成時,很少使用ibatis的dataSource節點
2.在 <transactionmanager type="JDBC"> </transactionmanager> 這個配置中有type也有JDBC,JTA,EXTERNAL.我想問下基於JDBC,及JTA的事務可以應用到哪中程度.而對EXTERNAL在什么情況下會用到?
JDBC使用 數據庫自己的事務(局部事務),connect.beginTranstion(), connect.commit()等
JTA : 使用jta 事務管理器管理事務(全局事務),使用userTranstion對象
External: 自己(Ibatis)不控制事務,事務交由外部控制,一般在CTM,或spring托管事務中使用
常用的是External,應為在我的應用中,事務都是用spring托管的,如果不是,那就就用jdbc,如果在app server中,你又不想使用容器托管事務,那就用JTA
3.在開發指南中提到"ibatis 的緩存機制使用必須特別謹慎",我想問下,ibatis中cache用到的地方大不大,如果不用會出現哪寫不好的清況,因為我知道hibernate中緩沖機制是它的一個亮點,那ibatis中又是怎么樣呢?
基本上用處不大(可能會有很多人和我的觀點不同)
ibatis 是個sql拼裝器,強調的是直接與數據庫打交道,sql的質量決定了最后的效率,再說數據庫本身就提供的cache。類似many to one , many to many , one to one 的Hibernate的產物,可以直接做成視圖,在使用ibatis去查詢,這樣可以充分的使用使用db自己的cache
1
2
3
4
|
</ dataSource >
</ transactionManager >
< sqlMap resource =
"com/wyq/map/userMap.xml"
/>
</ sqlMapConfig >
|
JNDI的配置大部分都在應用服務器中進行,所以在ibatis中的配置相對簡單
(1)jdbc事務控制的JNDI配置

1
2
3
4
5
|
< transctionManager type =
"JDBC"
>
< dataSource type =
"JNDI"
>
< property name =
"DataSource"
value =
"java:comp/env/jdbc/myDataSource"
/>
</ dataSource >
</ transctionManager >
|
(2)JTA事務控制的JNDI配置

1
2
3
4
5
6
|
< transctionManager type =
"JTA"
>
< property name =
"UserTransaction"
value =
"java:/ctx/con/UserTransaction"
/>
< dataSource type =
"JNDI"
>
< property name =
"DataSource"
value =
"java:comp/env/jdbc/myDataSource"
/>
</ dataSource >
</ transctionManager >
|