`
wwtaoin
  • 浏览: 25452 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Mybatis\Spring编程式事务管理

阅读更多

需求:同时有多条修改数据库操作,当一条出错,所有回滚

 

1、mybatis事务处理(作用于持久层,即DAO)

 

/**
 *  事务工厂接口,产生新的事务
 */
TransactionFactory transactionFactory = new JdbcTransactionFactory();
SqlSession session = sqlSessionFactory.openSession();
//newTransaction(Connection arg, boolean autoCommit);
Transaction newTransaction = transactionFactory.newTransaction(session.getConnection(), false);

  由  newTransaction处理commit(),rollback(),close()

 

参考资料:

 

在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”):
? JDBC – 这个配置直接简单使用了JDBC 的提交和回滚设置。它依赖于从数据源得
到的连接来管理事务范围。
? MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让
容器来管理事务的整个生命周期(比如 Spring 或 JEE应用服务器的上下文)。默认
情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止
它,将 closeConnection 属性设置为 false。例如:
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换使用它们,你需
要放置将你自己的类的完全限定名或类型别名,它们引用了你对 TransacFactory 接口的实现
类。
public interface TransactionFactory {
void setProperties(Properties props);
Transaction newTransaction(Connection conn, boolean autoCommit);
}
任何在 XML 中配置的属性在实例化之后将会被传递给 setProperties()方法。你的实现类
需要创建一个事务接口的实现,这个接口也很简单:
public interface Transaction {
Connection getConnection();
void commit() throws SQLException;
void rollback() throws SQLException;
void close() throws SQLException;
}
使用这两个接口,你可以完全自定义 MyBatis 对事务的处理

 

2、spring事务处理(作用于控制层)

spring就比较麻烦,需要用到spring编程式事务管理(我们平时用的都是声明式事务管理),具体区别google

 

@Controller   
public class 控制类 {
   @Resource PlatformTransactionManager platformTransactionManager;   
   public void unitDelJob(Map<String, Object> arguments) {   
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();   
        TransactionStatus status=platformTransactionManager.getTransaction(def);   
        try {   
            service层业务或DAO层业务,看你的框架;
			} catch (RuntimeException e) {   
            platformTransactionManager.rollback(status);   
            e.printStackTrace();   
        } finally {   
            platformTransactionManager.commit(status);   
        }   
    }   
}  
 

  通过  platformTransactionManager管理事务;

这里用注解装配一下,就不自己写bean的,需要的话自己在spring装配一下吧!

 

 

欢迎指正!!! 

 

 

分享到:
评论
3 楼 java_man 2011-07-31  
1.@Controller     
2.public class 控制类 {  
3.   @Resource PlatformTransactionManager platformTransactionManager;     
4.   public void unitDelJob(Map<String, Object> arguments) {     
5.        DefaultTransactionDefinition def = new DefaultTransactionDefinition();     
6.        TransactionStatus status=platformTransactionManager.getTransaction(def);     
7.        try {     
8.            service层业务或DAO层业务,看你的框架;  
9.            } catch (RuntimeException e) {     
10.            platformTransactionManager.rollback(status);     
11.            e.printStackTrace();     
12.        } finally {     
13.            platformTransactionManager.commit(status);     
14.        }     
15.    }     
16.}

请问楼主,红色字体部分,可以使用sping管理的sqlSession?谢谢!
2 楼 wwtaoin 2011-07-22  
Rong_it 写道
您好,请教下,mybatis中,如果DAO层是@mapper 来实现的即用的是annotation,如果实现编程式事务?我看了mbatis日志,每进行一次数据库操作就会一次opensession,closesession;貌似spring事务管理根本就不起作用?

@Repository我的DAO用的是这个注解,声明为Spring的bean,
@Resource SqlSessionFactory sqlSessionFactory;将sqlSessionFactory依赖对象进行注入
mybatis的配置文件中不配置事务和datasource就是
<environments default=""></environments>不进行配置,全部由Spring的事务进行处理,具体你想知道什么就差下mybatis用户手册,写的挺多的,不过有些地方不对,自己用的时候注意点
1 楼 Rong_it 2011-07-12  
您好,请教下,mybatis中,如果DAO层是@mapper 来实现的即用的是annotation,如果实现编程式事务?我看了mbatis日志,每进行一次数据库操作就会一次opensession,closesession;貌似spring事务管理根本就不起作用?

相关推荐

    MyBatis Spring声明式事务管理示例代码

    而且编程式事务管理会造成事务管理代码和被管理的代码耦合,不符合软件工程中“高内聚、低耦合”的要求。若采用AOP,则可以避免以上缺陷。 作者博客的示例代码:http://legend2011.blog.51cto.com/3018495/1239139。

    spring+mybatis的声明式事务

    Spring提供两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过编写代码来控制事务的开始、提交、回滚等操作,灵活性高但侵入性强。相比之下,声明式事务管理则更加简洁,它通过配置或注解来...

    spring+mybatis的编码式事务

    编码式事务,也称为编程式事务管理,是指在代码中显式地控制事务的开始、提交、回滚等操作。这种方式虽然灵活,但会增加代码的复杂性和维护难度。下面将详细阐述Spring+MyBatis中的编码式事务管理。 1. **Spring的...

    Maven + spring + mybatis + mysql + 事务管理

    编程式事务管理则需要开发者手动调用begin、commit和rollback等方法,虽然更灵活但相对复杂。 在Web应用中,通常将这些组件整合到一个WAR文件中,如压缩包中的`index.jsp`代表Web应用的入口页面,`META-INF`目录...

    springmvc+mybatis+声明式事务管理

    在IT行业中,SpringMVC、MyBatis以及声明式事务管理是Java Web开发中的关键组件。这个项目结合了这三个核心技术,构建了一个高效、稳定的后端系统。以下将详细阐述这些技术及其相互配合的工作原理。 首先,...

    mybatis-spring-1.31.jar

    其次,MyBatis-Spring支持Spring的事务管理。它能够自动将MyBatis的操作纳入Spring的全局事务管理中,实现事务的统一控制。这样,开发者无需关心事务的开启、提交、回滚等细节,只需要关注业务逻辑,提高了开发效率...

    mybatis-spring-1.3.3.jar官方下载

    5. **Transaction Management**:MyBatis-Spring 提供了与 Spring 事务管理的无缝集成,可以使用 Spring 的声明式事务管理来处理数据操作的事务。 在实际项目中,mybatis-spring-1.3.3.jar 包的使用步骤通常包括...

    mybatis-spring-1.2.0.jar

    1. **自动事务管理**:整合Spring的声明式事务管理,使得在MyBatis中可以方便地进行事务控制。 2. **SqlSession管理**:避免手动创建和关闭SqlSession,自动在Spring的上下文中处理SqlSession生命周期。 3. **...

    mybatis-spring-1.1.1-bundle

    MyBatis-Spring允许使用Spring的声明式事务管理。只需在Spring配置文件中声明PlatformTransactionManager,MyBatis的SqlSession将在Spring的事务范围内自动打开和关闭,实现事务的一致性。 5. 示例应用 在mybatis-...

    Mybatis spring spring mvc

    5. **事务管理**:Spring提供了一种声明式事务管理,可以在服务层的方法上添加@Transactional注解,由Spring自动处理事务的开始、提交或回滚。需要正确配置PlatformTransactionManager,如...

    mybatis-spring-1.3.1

    这包括声明式事务和编程式事务,可以根据项目的具体需求选择适合的方式。 5. **ExecutorType**: 在MyBatis-Spring中,可以通过Spring的事务配置来指定ExecutorType(执行器类型),如SIMPLE、REUSE或BATCH,这使得...

    spring与mybatis整合实现事务配置

    4. **事务配置**:在Spring中,事务管理有两种方式:编程式事务管理和声明式事务管理。通常我们采用声明式事务管理,通过`&lt;tx:annotation-driven&gt;`标签启用基于注解的事务管理。事务的传播行为、隔离级别、超时时间...

    mybatis-Spring整合jar包

    2. **事务管理**:Spring提供声明式事务管理,可以在配置文件中定义事务边界,MyBatis-Spring会自动处理事务的提交和回滚,减少了手动处理事务的复杂性。 3. **MapperScannerConfigurer**:这是一个Spring配置类,...

    spring3 struts2 Mybatis3 组件注解 事务注解 实例

    此外,`@Transactional`注解用于声明式事务管理,使得开发者无需显式管理事务边界。 Struts2是基于MVC设计模式的Web应用框架,它继承了Struts1的优秀特性,并结合了WebWork的优势。Struts2允许开发者使用注解来配置...

    Spring 整合mybatis(注解&xml版声明式事务).pdf

    Spring与MyBatis的整合,一方面利用Spring管理MyBatis的SqlSessionFactory和SqlSession,另一方面Spring通过AOP提供声明式事务管理,进一步简化了数据库操作代码。在声明式事务管理中,我们可以在业务逻辑方法上添加...

    spring编程式事物

    总之,Spring编程式事务管理是一种直接在代码中控制事务的方法,它适合于需要精细控制事务流控的场景。尽管声明式事务管理更常见,但编程式事务管理对于某些复杂情况仍然很有价值。结合源码理解和工具应用,开发者...

    mybatis整合spring 实例

    6. **事务管理**:Spring提供了一种声明式事务管理方式,只需在需要事务的方法上添加`@Transactional`注解,Spring会自动进行事务的开启、提交或回滚。 通过以上步骤,我们可以看到MyBatis和Spring的整合简化了数据...

    mybatis-spring-1.2.1.zip

    5. **TransactionManagementConfigurer**: MyBatis-Spring支持Spring的声明式事务管理。通过实现TransactionManagementConfigurer接口,你可以配置事务边界和回滚规则,使得MyBatis操作能在Spring事务范围内进行。 ...

    mybatis-spring 1.2.0 jar包

    5. **TransactionManagement**: MyBatis-Spring支持Spring的声明式事务管理,使得事务的边界可以清晰地定义在Service层,提高了事务处理的灵活性和可维护性。 6. **ExecutorType**: 支持设置不同的Executor类型,...

    09-4编程式事务管理.rar

    Spring框架提供了两种主要的事务管理方式:声明式事务管理和编程式事务管理。本资料着重于“编程式事务管理”,这是一种通过代码直接控制事务开始、提交、回滚等操作的方式。 在Spring中,编程式事务管理通常使用...

Global site tag (gtag.js) - Google Analytics