我们已经使用Mybatis开发了一个数据持久化框架。该框架使用普通的MyBatis API。(我们被禁止使用任何mybatis-spring,请不要问…为什么?)现在我们必须将这个持久性框架与其他团队开发的另一个框架集成在一起。这个框架在很大程度上使用了spring事务。我们的持久化框架DAOs将由该框架在其自己的API…中使用。.that意味着spring托管事务将被传播到MyBatis DAO。我们期望我们的基于MyBatis的持久化框架能够毫无问题地参与spring托管事务。
我们有两个选择来完成这项工作(1)更改我们的持久框架以使用mybatis-spring模块。更改DAO以使用通过spring和spring的SqlSessionFactoryBean直接注入的映射器。我确实构建了一个小示例,模拟框架和一切工作,没有任何问题。这种方法的问题在于,它需要更改几乎所有的DAO来使用spring注入的映射器,再次广泛地测试框架。由于交付时间的限制,我们根本没有时间。
(2)使用mybatis- spring,使用spring定义SqlSeeionFactory -设置其他框架使用的数据源和事务管理器。就像这样
<bean id="smpDataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
<property name="connectionCachingEnabled" value="true" />
<property name="URL"> <value>${db.thin.url}</value></property>
<property name="user"> <value>${db.user}</value></property>
<property name="password"><value>${db.password}</value>
</property>
</bean>
<bean id="dbTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="smpDataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="smpDataSource" />
<property name="typeAliasesPackage" value="spike.smp51.domain" />
<property name="mapperLocations" value="classpath*:spike/smp51/mappers/*.xml" </bean>然后,在应用程序代码中,MyBatis DAO从spring获取sqlseesionfactory,如
public static SqlSessionFactory getSqlSessionFactory() throws Exception
{
DefaultSqlSessionFactory sessionFactory = (DefaultSqlSessionFactory)ctx.getBean("sqlSessionFactory");
return sessionFactory;
}所有DAO都已经使用SqlSeesionFactory打开和关闭会话。只需将mybatis创建sqlseeionfactory替换为spring创建的sqlseeionfactory。这样一来,我们将只有几行更改。这里概述了这种方法,mybatis文档对这种方法提出了警告--具体地说,它不会参与spring事务。
当我尝试第二种方法时,我们的框架能够参与spring事务。这很奇怪。那么MyBatis文档是不正确的吗?我确实通过使用spring transactions + AOP创建各种事务边界来广泛地验证了这一点。spring每次都能够参与MyBatis托管事务。由于第二种方法将为我们节省90%的开发时间-我们真的很喜欢使用它-但是担心,因为MyBatis警告遵循这种方法。有没有人尝试过这种方法?任何反馈都是非常感谢的。
发布于 2014-01-24 16:04:49
你对此有什么回报吗?
我想知道在文档中他们是否在谈论来自Mybatis-api的org.apache.ibatis.session.SqlSessionFactory,而您使用的SqlSessionFactory来自mybatis-spring lib:org.mybatis.spring.SqlSessionFactoryBean
https://stackoverflow.com/questions/17103135
复制相似问题