`
pavel
  • 浏览: 928004 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring入门(07-01)-Spring的事务-注解方式

阅读更多

 用 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框架。Spring是Java开发领域中最为广泛应用的轻量级框架,它的核心特性包括依赖注入、面向...

    spring入门学习-hello,world

    在"spring入门学习-hello,world"这个主题中,我们将探索如何开始Spring的基本使用。 首先,我们需要理解Spring的核心概念——依赖注入。依赖注入是Spring的核心特性,它允许我们通过容器来管理对象的生命周期和对象...

    spring-framework-4.0.3.RELEASE官方完整包

    - **快速入门**:详细介绍了如何搭建Spring环境,以及创建第一个Spring应用的步骤。 - **参考指南**:涵盖所有核心模块的API文档,包括类、接口和方法的详细说明,是开发者日常编码的重要参考。 - **教程与示例**...

    Spring框架入门-项目代码.rar

    8. **事务管理**:Spring提供了编程式和声明式两种事务管理方式,能够轻松地进行事务控制,确保数据的一致性。 9. **Spring Boot**:虽然未在标签中提及,但Spring Boot是现代Spring应用的首选启动框架,它简化了...

    Spring-data-jpa常用教程.pdf

    - 通过 `&lt;tx:annotation-driven/&gt;` 标签或相应的 Java 配置启用 Spring 的事务管理功能,这样可以在 Service 层使用 `@Transactional` 注解来声明式地管理事务。 5. **使用 Repository 接口**: - 在 Service 层...

    spring入门代码项目

    《Spring入门代码项目详解》 在IT行业中,Spring框架无疑是最受欢迎的Java企业级应用开发框架之一。本项目旨在帮助初学者快速入门Spring,通过实际的代码操作来理解和掌握Spring的核心概念与用法。以下是对每个子...

    spring-framework-2.0-m1-with-dependencies.zip

    Spring MVC是Spring Framework的一部分,为构建Web应用程序提供了一种优雅的方式。它分离了模型、视图和控制器,提高了代码的可测试性和可维护性。 5. **Spring表达式语言(SpEL)**: Spring Expression ...

    spring入门学习-6、AOP几种配置方式详解.pdf

    Spring 提供了多种方式来支持 AOP 的实现,主要包括基于代理的经典 AOP、Schema-based 的 AOP 和 @AspectJ 注解驱动的 AOP。本文将详细介绍这三种类型的配置方式。 #### 二、基于代理的经典 AOP ##### 2.1 ...

    spring入门学习-5、AOP概念及特点.pdf

    它主要侧重于通过 Spring IoC 容器实现 AOP 功能,并且支持基于 XML 和注解的方式配置 AOP。Spring AOP 的特点包括: - **支持方法级别的连接点**:只支持方法级别的切面。 - **灵活的通知类型**:提供了多种不同...

    spring-mybatis-spring-3.0.1.zip

    《Spring与MyBatis整合详解..."spring-mybatis-spring-3.0.1.zip"资源包提供了一个快速入门的平台,对于学习和理解这种整合方式具有很高的价值。希望这份资源能对广大开发者有所帮助,进一步推动Java技术的普及和应用。

    spring-framework-3.2.10 jar包和文档

    面向切面编程则提供了一种将关注点分离的方式,使得业务逻辑与系统服务如日志、事务管理等可以解耦。 Spring 框架由多个模块组成,其中包括: 1. **Core Container**:这是 Spring 的基础,包括 Beans、Core、...

    spring-framework-3.2.17.RELEASE-dist

    5. **Spring AOP事务管理**:Spring提供了声明式事务管理,开发者只需在配置文件或注解中声明事务边界,无需在代码中手动处理。这使得事务管理变得更加简单,同时也降低了出错的可能性。 6. **Spring的容器**:...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘3.zip

    060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘4.zip

    060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘2.zip

    060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘1.zip

    060-spring-tx-事务注解添加实践.mp4 061-spring-tx-只读模式介绍和设置.mp4 062-spring-tx-事务超时时间设置.mp4 063-spring-tx-事务异常指定问题.mp4 064-spring-tx-事务隔离级别设置.mp4 065-spring-tx-事务...

    Spring 入门教程资料(源码源代码及课程笔记)

    本入门教程资料是针对初学者和求职者设计的,旨在帮助他们快速掌握 Spring 的基础和关键概念。 在提供的压缩包文件中,我们看到包含了一些以日期或课程编号命名的文件夹,比如 "6-09"、"6-13"、"6-07spring"、"6-08...

    非注解Springmvc+spring+hibernate 入门实例

    下面我们将深入探讨"非注解SpringMVC+Spring+Hibernate入门实例"中的关键知识点。 首先,让我们从SpringMVC开始。SpringMVC是一个Model-View-Controller架构模式的实现,用于构建Web应用程序。在非注解方式下,我们...

    使用Spring的注解方式实现AOP入门

    本教程将引导您入门Spring的注解式AOP实现。 首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它封装了特定的关注点,如日志记录。切点(Pointcut)定义了在何时应用这些关注点,通常是一个方法调用...

    dbApi-spring-boot-starter-demo:dbApi-spring-boot-starter案例代码

    《dbApi-spring-boot-starter实战指南:基于Java的数据库API启动器应用示例》 在现代软件开发中,Spring Boot已经成为Java企业级应用的首选框架,它简化了配置并提供了快速开发的能力。dbApi-spring-boot-starter是...

Global site tag (gtag.js) - Google Analytics