ibatis中simple,dbcp,jndi的区别

zhaojp0 2013-05-29

1.在ibatis的配置文件中dataSource节点有这么个配置<datasourcetype="SIMPLE"></datasource>,根据原文下的解释知道其中type有SIMPLE,DBCP,JNDI三种.我想问下这三种类型的区别在于哪里,在什么情况下用到,常用的是哪个,及它的优点在于哪里?

看情况,simple用于测试,dbcp是采用dbcp做数据源,jndi是使用appserver提供的数据源

一般来说,在实际应用中jndi用的比较多,simple用于测试

不过,多说了一句,dataSource一般都是在spring中创建或管理,所以和spring集成时,很少使用ibatis的dataSource节点

2.在<transactionmanagertype="JDBC"></transactionmanager>这个配置中有type也有JDBC,JTA,EXTERNAL.我想问下基于JDBC,及JTA的事务可以应用到哪中程度.而对EXTERNAL在什么情况下会用到?

JDBC使用数据库自己的事务(局部事务),connect.beginTranstion(),connect.commit()等

JTA:使用jta事务管理器管理事务(全局事务),使用userTranstion对象

External:自己(Ibatis)不控制事务,事务交由外部控制,一般在CTM,或spring托管事务中使用

常用的是External,应为在我的应用中,事务都是用spring托管的,如果不是,那就就用jdbc,如果在appserver中,你又不想使用容器托管事务,那就用JTA

3.在开发指南中提到"ibatis的缓存机制使用必须特别谨慎",我想问下,ibatis中cache用到的地方大不大,如果不用会出现哪写不好的清况,因为我知道hibernate中缓冲机制是它的一个亮点,那ibatis中又是怎么样呢?

基本上用处不大(可能会有很多人和我的观点不同)

ibatis是个sql拼装器,强调的是直接与数据库打交道,sql的质量决定了最后的效率,再说数据库本身就提供的cache。类似manytoone,manytomany,onetoone的Hibernate的产物,可以直接做成视图,在使用ibatis去查询,这样可以充分的使用使用db自己的cache

</dataSource>

</transactionManager>

<sqlMapresource="com/wyq/map/userMap.xml"/>

</sqlMapConfig>

JNDI的配置大部分都在应用服务器中进行,所以在ibatis中的配置相对简单

(1)jdbc事务控制的JNDI配置

<transctionManagertype="JDBC">

<dataSourcetype="JNDI">

<propertyname="DataSource"value="java:comp/env/jdbc/myDataSource"/>

</dataSource>

</transctionManager>

(2)JTA事务控制的JNDI配置

<transctionManagertype="JTA">

<propertyname="UserTransaction"value="java:/ctx/con/UserTransaction"/>

<dataSourcetype="JNDI">

<propertyname="DataSource"value="java:comp/env/jdbc/myDataSource"/>

</dataSource>

</transctionManager>

相关推荐

兔子压倒窝边草 / 0评论 2013-07-26
蜀川居 / 0评论 2014-07-16