用 spring 事务管理器,由spring来负责数据库的打开,提交,回滚.
默认遇到运行期例外
(throw new RuntimeException();)会回滚:
unchecked,需要捕获的例外(throw new Exception();)不会回滚:
checked.需要修改规则加入注释:
@Transactional(rollbackFor=Exception.class) //指定回滚,需要捕获的例外(throw new Exception("");)不会回滚
public void methodName() {
throw new Exception("");
}
@Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期例外
(throw new RuntimeException("");)会回滚
public ItimDaoImpl getItemDaoImpl() {
throw new RuntimeException("");
}
//事务传播属性
//如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
@Transactional(propagation=Propagation.REQUIRED)
//容器不为这个方法开启事务
@Transactional(propagation=Propagation.NOT_SUPPORTED)
//不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.REQUIRES_NEW)
//必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.MANDATORY)
//必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.NEVER)
//如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
@Transactional(propagation=Propagation.SUPPORTS)
/*public void methodName(){
update();//本类的修改方法 1
otherBean.update();//调用其他类的修改方法
update();//本类的修改方法 2
}
other失败了不会影响 本类的修改提交成功,本类update的失败,other也失败
*/
@Transactional(propagation=Propagation.NESTED)
@Transactional (propagation = Propagation.REQUIRED,readOnly=true)
//readOnly=true只读,不能更新,删除
@Transactional (propagation = Propagation.REQUIRED,timeout=30)
//设置超时时间
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)
//设置数据库隔离级别
code:
import java.util.List;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.hx.springjdbc.bean.Login;
import com.hx.springjdbc.service.LoginService;
@Transactional
public class LoginServiceImpl implements LoginService {
private JdbcTemplate jdbcTemplate;
public void setDataSource(BasicDataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
//@Transactional(rollbackFor = Exception.class)
@Transactional(noRollbackFor=RuntimeException.class)
public void delete(int id) throws Exception {
// TODO Auto-generated method stub
jdbcTemplate.update("delete from Login where id=?",
new Object[] { id }, new int[] { java.sql.Types.INTEGER });
//throw new Exception();
throw new RuntimeException();
}
//不支持事务
@Transactional(propagation=Propagation.NOT_SUPPORTED)
public Login getLogin(int id) {
// TODO Auto-generated method stub
return (Login) jdbcTemplate.queryForObject(
"select * from Login where id=?", new Object[] { id },
new LoginRowMapper());
}
@SuppressWarnings("unchecked")
public List<Login> getLogins() {
// TODO Auto-generated method stub
return (List<Login>) jdbcTemplate.query("select * from Login",
new LoginRowMapper());
}
@Transactional(propagation=Propagation.NOT_SUPPORTED)
public void save(Login login) {
// TODO Auto-generated method stub
jdbcTemplate.update("insert into login(name) values(?)",
new Object[] { login.getName() },
new int[] { java.sql.Types.VARCHAR });
}
public void update(Login login) {
// TODO Auto-generated method stub
jdbcTemplate.update("update Login set name=? where id=?", new Object[] {
login.getName(), login.getId() }, new int[] {
java.sql.Types.VARCHAR, java.sql.Types.INTEGER });
}
配置文件:
<!-- 采用注解方式使用事务 -->
<tx:annotation-driven transaction-manager="txManager"/>
分享到:
相关推荐
《Spring入门经典》是一本专为初学者和有一定基础的开发者设计的教程,它通过附带的源代码帮助读者深入理解并快速掌握Spring框架。Spring是Java开发领域中最为广泛应用的轻量级框架,它的核心特性包括依赖注入、面向...
在"spring入门学习-hello,world"这个主题中,我们将探索如何开始Spring的基本使用。 首先,我们需要理解Spring的核心概念——依赖注入。依赖注入是Spring的核心特性,它允许我们通过容器来管理对象的生命周期和对象...
- **快速入门**:详细介绍了如何搭建Spring环境,以及创建第一个Spring应用的步骤。 - **参考指南**:涵盖所有核心模块的API文档,包括类、接口和方法的详细说明,是开发者日常编码的重要参考。 - **教程与示例**...
8. **事务管理**:Spring提供了编程式和声明式两种事务管理方式,能够轻松地进行事务控制,确保数据的一致性。 9. **Spring Boot**:虽然未在标签中提及,但Spring Boot是现代Spring应用的首选启动框架,它简化了...
- 通过 `<tx:annotation-driven/>` 标签或相应的 Java 配置启用 Spring 的事务管理功能,这样可以在 Service 层使用 `@Transactional` 注解来声明式地管理事务。 5. **使用 Repository 接口**: - 在 Service 层...
《Spring入门代码项目详解》 在IT行业中,Spring框架无疑是最受欢迎的Java企业级应用开发框架之一。本项目旨在帮助初学者快速入门Spring,通过实际的代码操作来理解和掌握Spring的核心概念与用法。以下是对每个子...
Spring MVC是Spring Framework的一部分,为构建Web应用程序提供了一种优雅的方式。它分离了模型、视图和控制器,提高了代码的可测试性和可维护性。 5. **Spring表达式语言(SpEL)**: Spring Expression ...
Spring 提供了多种方式来支持 AOP 的实现,主要包括基于代理的经典 AOP、Schema-based 的 AOP 和 @AspectJ 注解驱动的 AOP。本文将详细介绍这三种类型的配置方式。 #### 二、基于代理的经典 AOP ##### 2.1 ...
它主要侧重于通过 Spring IoC 容器实现 AOP 功能,并且支持基于 XML 和注解的方式配置 AOP。Spring AOP 的特点包括: - **支持方法级别的连接点**:只支持方法级别的切面。 - **灵活的通知类型**:提供了多种不同...
《Spring与MyBatis整合详解..."spring-mybatis-spring-3.0.1.zip"资源包提供了一个快速入门的平台,对于学习和理解这种整合方式具有很高的价值。希望这份资源能对广大开发者有所帮助,进一步推动Java技术的普及和应用。
面向切面编程则提供了一种将关注点分离的方式,使得业务逻辑与系统服务如日志、事务管理等可以解耦。 Spring 框架由多个模块组成,其中包括: 1. **Core Container**:这是 Spring 的基础,包括 Beans、Core、...
5. **Spring AOP事务管理**:Spring提供了声明式事务管理,开发者只需在配置文件或注解中声明事务边界,无需在代码中手动处理。这使得事务管理变得更加简单,同时也降低了出错的可能性。 6. **Spring的容器**:...
060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...
060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...
060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...
060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...
本入门教程资料是针对初学者和求职者设计的,旨在帮助他们快速掌握 Spring 的基础和关键概念。 在提供的压缩包文件中,我们看到包含了一些以日期或课程编号命名的文件夹,比如 "6-09"、"6-13"、"6-07spring"、"6-08...
下面我们将深入探讨"非注解SpringMVC+Spring+Hibernate入门实例"中的关键知识点。 首先,让我们从SpringMVC开始。SpringMVC是一个Model-View-Controller架构模式的实现,用于构建Web应用程序。在非注解方式下,我们...
本教程将引导您入门Spring的注解式AOP实现。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它封装了特定的关注点,如日志记录。切点(Pointcut)定义了在何时应用这些关注点,通常是一个方法调用...
《dbApi-spring-boot-starter实战指南:基于Java的数据库API启动器应用示例》 在现代软件开发中,Spring Boot已经成为Java企业级应用的首选框架,它简化了配置并提供了快速开发的能力。dbApi-spring-boot-starter是...