需求:同时有多条修改数据库操作,当一条出错,所有回滚
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装配一下吧!
欢迎指正!!!
分享到:
相关推荐
而且编程式事务管理会造成事务管理代码和被管理的代码耦合,不符合软件工程中“高内聚、低耦合”的要求。若采用AOP,则可以避免以上缺陷。 作者博客的示例代码:http://legend2011.blog.51cto.com/3018495/1239139。
Spring提供两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过编写代码来控制事务的开始、提交、回滚等操作,灵活性高但侵入性强。相比之下,声明式事务管理则更加简洁,它通过配置或注解来...
编码式事务,也称为编程式事务管理,是指在代码中显式地控制事务的开始、提交、回滚等操作。这种方式虽然灵活,但会增加代码的复杂性和维护难度。下面将详细阐述Spring+MyBatis中的编码式事务管理。 1. **Spring的...
编程式事务管理则需要开发者手动调用begin、commit和rollback等方法,虽然更灵活但相对复杂。 在Web应用中,通常将这些组件整合到一个WAR文件中,如压缩包中的`index.jsp`代表Web应用的入口页面,`META-INF`目录...
在IT行业中,SpringMVC、MyBatis以及声明式事务管理是Java Web开发中的关键组件。这个项目结合了这三个核心技术,构建了一个高效、稳定的后端系统。以下将详细阐述这些技术及其相互配合的工作原理。 首先,...
其次,MyBatis-Spring支持Spring的事务管理。它能够自动将MyBatis的操作纳入Spring的全局事务管理中,实现事务的统一控制。这样,开发者无需关心事务的开启、提交、回滚等细节,只需要关注业务逻辑,提高了开发效率...
5. **Transaction Management**:MyBatis-Spring 提供了与 Spring 事务管理的无缝集成,可以使用 Spring 的声明式事务管理来处理数据操作的事务。 在实际项目中,mybatis-spring-1.3.3.jar 包的使用步骤通常包括...
1. **自动事务管理**:整合Spring的声明式事务管理,使得在MyBatis中可以方便地进行事务控制。 2. **SqlSession管理**:避免手动创建和关闭SqlSession,自动在Spring的上下文中处理SqlSession生命周期。 3. **...
MyBatis-Spring允许使用Spring的声明式事务管理。只需在Spring配置文件中声明PlatformTransactionManager,MyBatis的SqlSession将在Spring的事务范围内自动打开和关闭,实现事务的一致性。 5. 示例应用 在mybatis-...
5. **事务管理**:Spring提供了一种声明式事务管理,可以在服务层的方法上添加@Transactional注解,由Spring自动处理事务的开始、提交或回滚。需要正确配置PlatformTransactionManager,如...
这包括声明式事务和编程式事务,可以根据项目的具体需求选择适合的方式。 5. **ExecutorType**: 在MyBatis-Spring中,可以通过Spring的事务配置来指定ExecutorType(执行器类型),如SIMPLE、REUSE或BATCH,这使得...
4. **事务配置**:在Spring中,事务管理有两种方式:编程式事务管理和声明式事务管理。通常我们采用声明式事务管理,通过`<tx:annotation-driven>`标签启用基于注解的事务管理。事务的传播行为、隔离级别、超时时间...
2. **事务管理**:Spring提供声明式事务管理,可以在配置文件中定义事务边界,MyBatis-Spring会自动处理事务的提交和回滚,减少了手动处理事务的复杂性。 3. **MapperScannerConfigurer**:这是一个Spring配置类,...
此外,`@Transactional`注解用于声明式事务管理,使得开发者无需显式管理事务边界。 Struts2是基于MVC设计模式的Web应用框架,它继承了Struts1的优秀特性,并结合了WebWork的优势。Struts2允许开发者使用注解来配置...
Spring与MyBatis的整合,一方面利用Spring管理MyBatis的SqlSessionFactory和SqlSession,另一方面Spring通过AOP提供声明式事务管理,进一步简化了数据库操作代码。在声明式事务管理中,我们可以在业务逻辑方法上添加...
总之,Spring编程式事务管理是一种直接在代码中控制事务的方法,它适合于需要精细控制事务流控的场景。尽管声明式事务管理更常见,但编程式事务管理对于某些复杂情况仍然很有价值。结合源码理解和工具应用,开发者...
6. **事务管理**:Spring提供了一种声明式事务管理方式,只需在需要事务的方法上添加`@Transactional`注解,Spring会自动进行事务的开启、提交或回滚。 通过以上步骤,我们可以看到MyBatis和Spring的整合简化了数据...
5. **TransactionManagementConfigurer**: MyBatis-Spring支持Spring的声明式事务管理。通过实现TransactionManagementConfigurer接口,你可以配置事务边界和回滚规则,使得MyBatis操作能在Spring事务范围内进行。 ...
5. **TransactionManagement**: MyBatis-Spring支持Spring的声明式事务管理,使得事务的边界可以清晰地定义在Service层,提高了事务处理的灵活性和可维护性。 6. **ExecutorType**: 支持设置不同的Executor类型,...
Spring框架提供了两种主要的事务管理方式:声明式事务管理和编程式事务管理。本资料着重于“编程式事务管理”,这是一种通过代码直接控制事务开始、提交、回滚等操作的方式。 在Spring中,编程式事务管理通常使用...