z244104850 2013-06-07 02:12 采纳率: 0%
浏览 6520

mybatis spring 整合 junit测试。 事务不起作用,不提交。删除无效???

applicationContext.xml 中的数据库和 sessionFactory以及事务配置
Xml代码

<bean id="bssDataSource"  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    <!-- Connection Info -->  
    <property name="driverClassName" value="${bss.jdbc.driver}" />  
    <property name="url" value="${bss.jdbc.url}" />  
    <property name="username" value="${bss.jdbc.username}" />  
    <property name="password" value="${bss.jdbc.password}" />  

    <!-- Connection Pooling Info -->  
    <property name="maxActive" value="${bss.dbcp.maxActive}" />  
    <property name="maxIdle" value="${bss.dbcp.maxIdle}" />  
    <property name="defaultAutoCommit" value="false" />  
    <!-- 连接Idle一个小时后超时 -->  
    <property name="timeBetweenEvictionRunsMillis" value="3600000" />  
    <property name="minEvictableIdleTimeMillis" value="3600000" />  
    <property name="testOnBorrow" value="true" />  
    <property name="testWhileIdle" value="true" />  
    <property name="validationQuery" value="${bss.dbcp.validationQuery}" />  
</bean>  


<!-- MyBatis配置 -->  
<bean id="bssSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    <property name="dataSource" ref="bssDataSource" />  
    <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 别名 -->  
    <property name="typeAliasesPackage" value="com.jxnc56.bss.entity" />  
    <!-- 显式指定Mapper文件位置 -->  
    <property name="mapperLocations" >  
        <list>  
        <value>  
            classpath:config/mybatis/sqlmap/bss/**/*.xml  
        </value>  
        </list>  
    </property>  
</bean>  


<!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口-->  
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
    <property name="basePackage" value="com.jxnc56.bss" />  
    <property name="annotationClass" value="com.jxnc56.bss.dao.MyBatisRepository"/>  
</bean>  

<!-- 事务管理,@Transactional("tmBss") -->  
<bean id="tmBss" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
    <property name="dataSource" ref="bssDataSource"></property>  
    <qualifier type="org.springframework.beans.factory.annotation.Qualifier" value="tmBss" />  
</bean>  

<!-- 使用annotation定义数据库事务,这样可以在类或方法中直接使用@Transactional注解来声明事务 -->  
<tx:annotation-driven transaction-manager="tmBss"  proxy-target-class="true" />  

java TEST:
Java代码

@Transactional("tmBss")  
public class ProductServiceTest extends SpringTransactionalTestCase {  
    @Autowired  
    private ProductDao pDao;  

    @Test  
    public void deleteTest (){  
        pDao.delete(4);  
        Product product = new Product();  
        product.setId(4);  
        System.out.println("-------------------------------------------->"+Arrays.toString(pDao.select(product).toArray()));  
    }  
}  

其中ProductDao 是被@MyBatisRepository标示的接口
log:
2013-06-07 09:40:57 107 - org.mybatis.spring.transaction.SpringManagedTransaction -915 [main] DEBUG org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [jdbc:mysql://localhost/nrcompany?useUnicode=true&characterEncoding=utf-8, UserName=root@localhost, MySQL-AB JDBC Driver] will be managed by Spring
2013-06-07 09:40:57 110 - com.jxnc56.bss.dao.ProductDao.delete -918 [main] DEBUG com.jxnc56.bss.dao.ProductDao.delete - ooo Using Connection [jdbc:mysql://localhost/nrcompany?useUnicode=true&characterEncoding=utf-8, UserName=root@localhost, MySQL-AB JDBC Driver]
2013-06-07 09:40:57 115 - com.jxnc56.bss.dao.ProductDao.delete -923 [main] DEBUG com.jxnc56.bss.dao.ProductDao.delete - ==> Preparing: delete from product where id=?
2013-06-07 09:40:57 140 - com.jxnc56.bss.dao.ProductDao.delete -948 [main] DEBUG com.jxnc56.bss.dao.ProductDao.delete - ==> Parameters: 4(Integer)
2013-06-07 09:40:57 142 - org.mybatis.spring.SqlSessionUtils -950 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a9d95]
2013-06-07 09:40:57 142 - org.mybatis.spring.SqlSessionUtils -950 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a9d95] from current transaction

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-26 22:01
    关注

    如果你的配置没有问题,但是事务仍然不起作用,还有几点需要注意:

    • 确保在测试类中调用的数据库操作都在事务内进行。也就是说,如果你的测试代码中有多个方法调用,那么这些方法调用都应该在同一个事务内执行,否则事务就不会起作用。
    • 确保在测试类中没有手动调用 SqlSession 的 commit() 或 rollback() 方法。这些方法用于手动控制事务的提交或回滚,如果在测试类中调用了这些方法,那么事务就不会起作用。
    • 如果测试类中调用的方法抛出了异常,则事务会自动回滚。因此,如果你的测试用例涉及到异常情况,需要注意测试代码是否已经正确处理了异常情况,以保证事务的正常运行。
    • 确保在测试类中使用的数据库连接支持事务。不同的数据库连接对事务的支持程度可能不同,因此需要注意。
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试