`
sungang_1120
  • 浏览: 325178 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

spring,ibatis整合后的事务问题

阅读更多
 

spring,ibatis整合后的事务问题

 

SPRING事务不回滚的问题,我进行了两次插入数据库的操作,第二次故意给一个非空字段插入null,但第一条记录还是成功插入了,一个星期了,没搞定,求指教。其中数据库已经设置为autocommit为false
框架及版本:
struts2 -2.0.1.4 , spring -2.5 ,ibatis 2.3,mysql 5.0

aplicationContext.xml:

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans     
  7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd     
  8.            http://www.springframework.org/schema/context     
  9.            http://www.springframework.org/schema/context/spring-context-2.5.xsd     
  10.            http://www.springframework.org/schema/aop  
  11.            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd     
  12.            http://www.springframework.org/schema/tx  
  13.            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  14.   
  15.     <bean id="dao" class="last.soul.dao.DAOImpl">  
  16.         <property name="sqlMapClient" ref="sqlMapClient"></property>  
  17.     </bean>  
  18.   
  19.     <bean id="userService" class="last.soul.service.UserServiceImpl">  
  20.         <property name="dao" ref="dao"></property>  
  21.     </bean>  
  22.     <bean id="login" class="last.soul.action.LoginAction">  
  23.         <property name="userService" ref="userService"></property>  
  24.     </bean>  
  25.   
  26.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  27.         destroy-method="close">  
  28.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  29.         <property name="url" value="jdbc:mysql://localhost:3306/test" />  
  30.         <property name="username" value="root" />  
  31.         <property name="password" value="root" />  
  32.     </bean>  
  33.   
  34.     <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  35.         <property name="configLocation" value="WEB-INF/sqlMapConfig.xml" />  
  36.         <property name="dataSource" ref="dataSource" />  
  37.     </bean>  
  38.     <bean id="transactionManager"  
  39.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  40.         <property name="dataSource">  
  41.             <ref bean="dataSource" />  
  42.         </property>  
  43.     </bean>  
  44.     <!--  
  45.         利用spring的TransactionProxyFactoryBean去对事务进行自动管理 <bean id="daoTr"  
  46.         class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  47.         <property name="transactionManager"> <ref local="transactionManager"  
  48.         /> </property> <property name="target"> <list><ref local="userService"  
  49.         /></list> </property> <property name="transactionAttributes"> <props>  
  50.         <prop key="*">PROPAGATION_REQUIRED,-Exception</prop> </props>  
  51.         </property> </bean>  
  52.     -->  
  53.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  54.         <!-- 哪些方法有 事务的传播性-->  
  55.         <tx:attributes>  
  56.             <tx:method name="*" isolation="READ_COMMITTED" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  57.         </tx:attributes>  
  58.   
  59.     </tx:advice>  
  60.   
  61.     <!-- 哪些类的方法参与了事务 -->  
  62.     <aop:config>  
  63.         <!-- execution(* com.east.spring.managerimpl.*.*(..))这个类的所有方法都用事务 -->  
  64.         <aop:pointcut id="allManagerMethod"  
  65.             expression="execution(* last.soul.service.UserServiceImpl.*.*(..))" />  
  66.         <!-- 引用 pointcut 和 advice-->  
  67.         <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" />  
  68.     </aop:config>  
  69.   
  70.   
  71. </beans>  

UserServiceImpl:

package last.soul.service;

import last.soul.common.beans.User;
import last.soul.dao.DAO;

public class UserServiceImpl implements UserService {

    DAO dao;

    public boolean login(String username, String password) throws Exception {
        User u1=new User();
        u1.setEmail("d@163.com");
        u1.setPassword("ccc");
        u1.setUsername("aaaa");
        dao.insert("user.insert", u1);
       
        User u2=new User();
        u2.setEmail("d@163.com");
        u2.setPassword("he");
        u2.setUsername(null);
        dao.insert("user.insert", u2);
       
        return true;
    }
   
    public DAO getDao() {
        return dao;
    }

    public void setDao(DAO dao) {
        this.dao = dao;
    }

    public boolean isExist(String username) {
        return false;
    }

    public Integer register(User record) {
        return null;
    }
}

DAOImpl:

package last.soul.dao;

import java.sql.SQLException;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

public class DAOImpl  extends SqlMapClientDaoSupport implements DAO{
    @SuppressWarnings("unchecked")
     public void insert(String sql,Object map) throws SQLException
    {
            this.getSqlMapClientTemplate().insert(sql, map);
    }

}



问题补充:
liwenjie 写道
spring默认进行回滚的异常是uncheckedException,而lz的SQLException 是checkedexception,无法进行回滚所以需要进行声明

<tx:advice id="txAdvice" transaction-manager="txManager">

  <tx:attributes>

         <tx:method name="get*" read-only="false" />

         <tx:method name="*" rollback-for="SQLException"/>

  </tx:attributes>

</tx:advice>



详情请参见 spring参考手册 回滚

我配的Exception不也一样而且我就是配置上了SQLException也是不回滚。
后来我又用了另外一个方法就是让他抛出我自己的异常,我让我自己的这个异常继承RuntimeException也是不回滚啊
分享到:
评论

相关推荐

    spring ibatis整合所需jar包

    1. 添加依赖:在`spring ibatis整合所需jar包`中,通常包含以下关键jar文件: - spring核心库:如spring-context、spring-beans、spring-aop等,用于Spring框架的基本功能。 - spring-jdbc和spring-tx:支持Spring...

    Spring+ibatis 保留ibatis事务的配置

    当保留ibatis事务后,开发者可以在业务逻辑中更自由地控制事务的提交和回滚。例如,在某个服务方法中,可以通过显式调用ibatis的`commit`和`rollback`方法来控制事务的最终状态。这种方式适用于那些需要更加精细控制...

    spring_ibatis整合案例

    在IT行业中,Spring框架与iBatis(现为MyBatis)的整合是常见的数据访问层解决方案,尤其在企业级应用开发中极为普遍。Spring是一个全面的Java应用程序框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-...

    spring与ibatis整合集成实例

    7. **DAO 层实现**:在整合后,可以创建基于 iBATIS 的 DAO 类,这些类继承自 SqlSessionDaoSupport 或使用 SqlSessionTemplate,通过这些工具类与数据库进行交互。 8. **Service 层设计**:在 Service 层,我们...

    spring3.2与Ibatis整合

    7. **测试**:在Spring与iBatis整合后,可以使用Spring的`@Transactional`注解进行单元测试,确保每个方法都在独立的事务中执行,便于模拟各种数据状态并进行断言。 以上就是关于"Spring 3.2与iBatis整合"及"在...

    spring+struts2+ibatis整合的jar包

    当我们把Spring、Struts2和iBatis整合在一起时,可以构建出一个高效、模块化的Web应用。Spring作为整体的框架容器,负责管理所有的Bean,包括Struts2和iBatis的相关组件。Struts2处理HTTP请求,调用Spring管理的业务...

    SPRING IBATIS 保留IBATIS事务的配置方式

    根据提供的文件信息,本文将详细解析Spring与iBatis整合时如何保留并使用iBatis事务管理机制,以及如何在应用程序中实现手动控制事务的方法。 ### Spring与iBatis整合 Spring框架是一个全面的企业级应用开发框架,...

    Struts2+Spring+Ibatis整合

    "Struts2+Spring+iBatis整合"是一个典型的MVC(Model-View-Controller)架构实现,适用于构建大型企业级应用。下面将详细介绍这三个框架以及它们整合的关键点。 **Struts2** 是一个基于MVC设计模式的Web应用框架,...

    spring3 ibatis整合实例

    Spring3 和 iBatis 整合是一个常见的Java企业级应用开发模式,主要用于构建灵活、可扩展的后端数据访问层。这个项目实例提供了一个详细的学习资源,帮助新手掌握这两种技术的融合。以下是对这个整合实例的详细解析:...

    Spring 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

    本篇将详细介绍如何在Spring 2.5版本中整合iBATIS 2.3,并利用Spring的声明式事务管理,以提升应用程序的稳定性和可维护性。 首先,我们需要了解Spring 2.5和iBATIS 2.3的基本概念。Spring 2.5是Spring框架的一个...

    Spring+iBatis整合详解

    ### Spring与iBatis整合详解 #### 一、前言 在Java企业级应用开发中,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力深受开发者喜爱,而iBatis(现更名为MyBatis)作为一款优秀的持久层框架,通过...

    struts2 spring ibatis 整合架构

    Struts2、Spring和iBatis是Java Web开发中常用的三个框架,它们分别负责MVC模式中的Action层、业务逻辑层以及数据访问层。将这三个框架整合在一起,可以构建出高效、灵活的企业级应用。 **Struts2** 是一个基于MVC...

    spring ibatis 配置(包括事务管理)

    在整合Spring和iBatis框架时,我们需要进行一系列的配置工作,以便于让Spring负责管理iBatis的数据访问层。Spring作为一个强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,可以方便地...

    struts2 spring ibatis整合的最少最全jar包

    1. 添加依赖:整合SSH,需要在项目中引入相应的jar包,包括Struts2、Spring、iBatis以及它们的依赖库,例如sitemesh用于页面装饰。确保包含所有必要的jar,如描述中提到的,这里有18个jar包,涵盖了基本需求。 2. ...

    Spring对IBatis的整合

    #### 一、Spring与IBatis整合概述 Spring框架与IBatis(现称为MyBatis)的整合为开发者提供了一种更简洁、更强大的数据库访问方式。Spring通过其内置的支持机制极大地简化了原有的IBatis访问代码,并且提供了与...

    struts2、spring、ibatis整合

    在与Struts2和iBatis的整合中,Spring主要负责管理Bean的生命周期和依赖关系,以及事务的统一管理。Spring的事务管理可以基于编程式或者声明式,后者通过@Transactional注解实现,更符合开闭原则,降低了代码的耦合...

    ibatis与spring整合

    ### ibatis与Spring框架整合详解 #### 一、ibatis简介 ibatis是一个开源的、基于Java的持久层框架,它提供了SQL映射的方式来进行数据库访问。与Hibernate等其他ORM框架相比,ibatis更加轻量级,对于那些只需要简单...

    spring和ibatis整合

    5. **事务管理**:Spring的PlatformTransactionManager接口负责处理事务,通过配置,可以将iBatis的数据库操作纳入Spring的事务管理范围。这样,当发生异常时,可以自动回滚事务,保证数据的一致性。 6. **DAO层...

    struts2 + spring + ibatis 整合例子

    通过Struts2、Spring和iBatis的整合,我们可以实现模型、视图和控制的分离,提高代码的可读性和可维护性。同时,Spring的DI和AOP特性使得对象管理更加灵活,iBatis则提供了方便的数据库操作方式。这样的组合在企业级...

    Struts2 Spring Ibatis mysql 项目整合

    Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的动作控制、依赖注入及持久层操作。本项目整合了这三个框架,并使用MySQL作为数据库,实现了一个基础的用户登录注册查询删除的功能...

Global site tag (gtag.js) - Google Analytics