2 z244104850 z244104850 于 2013.06.07 10:12 提问

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个回答

hui264781
hui264781   2014.03.10 20:10

http://blog.csdn.net/will_awoke/article/details/12002705
其实真正的问题在于spring 和springmvc 分父子容器,ContextLoaderListener才会给@Service加上事务,而springmvc 只是生成普通的bean

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mybatis spring 整合 junit测试无法提交事务
 Junit测试中update语句执行不成功,通过日志发现事务被回滚了 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@596765cf] ============ Transaction synchronization rolling back SqlSe
springboot+mybatis+mysql事务未生效
公司新项目 用的是springboot+mybatis+mysql 未使用springboot的jpa 1@Configuration @MapperScan("com.xx.xxx.dao") @EnableTransactionManagement public class MyBatisConfiguration { @Value("${connection.datasource.
springmvc mybatis 注解的方式 事务不起作用解决方案
1、使用springmvc导致事务不起作用时,首先查看是否组件重复扫描问题导致        由于采用的是SpringMVC、 MyBatis,故统一采用了标注来声明Service、Controller。服务器启动时的加载配置文件的顺序为web.xml---root-context.xml(Spring的配置文件)---servlet-context.xml(SpringMVC的配置文件),由于
springMVC mybatis mysql 配置 事务不起作用的原因
由于事务失效搞了我好长时间,也在网上找了很多,发现这篇文章是最好的所以推荐给大家。 http://blog.csdn.net/will_awoke/article/details/12002705 springMVC和spring一起使用的时候,配置文件会先后生成。大家现在多数喜欢用spring的注解方式进行配置,在配置文件中会有包的扫描过程,然而spring的扫描生成的service是具
springboot+shiro+mybatis整合发现部分功能事务没有被spring管理
Shiro自定义Realm中没有Spring的事物管理
springmvc mybatis 事务管理不生效原因
spring-mvc事务配置如下 expression="execution(* com.*.service.impl.*.*(..))" /> advice-ref="transactionAdvice" />   但在service允许代码报错后,事务回滚不生效 根据 百度上的
关于SpringMyBatis纯注解事务不能提交的问题分析与解决
本文用于描述spring+mybaits,或spring-jdbc处理oracle事务提交时,不能提交的问题,处理mysql则不存在此类问题
spring+mybatis使用事务管理不生效原因分析
spring+mybatis使用事务管理不生效原因 检查spring的配置信息是否配置正确 <!-- 配置事务的通知:(事务的增强) --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- p
spring+springmvc+mybatis事务失效问题
springmvc 事务配置时使用myP6DataSource导致事务失效
spring,springmvc,hibernate整合事务不起作用
刚学习完这三大框架,跟着别人的博客整合一下,就测试一下事务是否起作用,用的1/0来测试,用的@Transactional注解在service层,发现事务始终不起作用,也在网上查了一些资料,发现spring,springmvc配置文件中扫描包冲突了,因为我的是在web.xml中先加载spring的配置文件,然后加载springmvc的配置文件(两个都是扫描全部的包),看别人的博客说后者的扫描覆盖了前