博客
关于我
spring笔记(三)
阅读量:465 次
发布时间:2019-03-06

本文共 2192 字,大约阅读时间需要 7 分钟。

Spring事务控制详解

1.程序中事务控制

在应用程序中,事务控制是确保数据库操作的原子性、一致性、隔离性和持久性的关键环节。Spring框架通过声明式事务管理提供了简便的解决方案,能够有效实现事务控制。

1.1 环境准备

一个典型的Spring应用程序架构如下:用户访问 → Action → Service → Dao

在业务逻辑执行过程中,事务控制应在Service层统一管理。这是因为:

  • 服务层的每个方法调用代表一个业务操作
  • 所有涉及的DAO操作必须在同一个事务中执行
  • 如果某个DAO操作失败,整个事务需要回滚

模拟案例:在Service层调用两个DAO方法,要求如果其中一个方法抛出异常,整个操作必须回滚。

1.2 事务控制概述

编程式事务控制

手动控制事务的实现方式,通常需要在代码中显式地开启、提交和回滚事务。例如:

  • JDBC: Conn.setAutoCommit(false)
  • Hibernate: Session.beginTransaction()

这种方式灵活,但开发和维护成本较高,因为需要对每个需要事务控制的方法进行详细配置。

声明式事务控制

Spring提供了基于AOP的声明式事务管理,实现了对事务控制的最大程度的解耦。开发者只需在配置文件中配置事务管理方式,就可以实现事务控制,而无需手动编写事务相关代码。

1.3 事务管理器类

Spring支持两种主要的事务管理器:

  • DataSourceTransactionManager:基于JDBC的事务管理
  • HibernateTransactionManager:基于Hibernate的事务管理

2.声明式事务管理

2.1 XML配置方式

为了实现声明式事务管理,需要在Spring的配置文件中进行如下配置:

  • 引入Spring AOP相关jar包
  • 在bean.xml中配置事务管理器类
  • 配置事务增强(拦截需要事务控制的方法)
  • 核心配置示例:

    2.2 注解方式实现

    使用注解方式配置事务管理更加简便,只需在需要事务控制的方法上添加@Transactional注解。@Transactional可用于方法或类级别,具体配置如下:

    • @Transactional(readOnly=false, timeout=-1, noRollbackFor=ArithmeticException.class)

    注解配置示例:

    @Servicepublic class DeptService {    @Resource    private DeptDao deptDao;    @Transactional    public void save(Dept dept) {        deptDao.save(dept);    }}

    2.3 事务传播行为

    @Transactional注解支持不同的传播行为:

    • Propagation.REQUIRED:当前方法必须在已有事务中执行
    • Propagation.REQUIRED_NEW:当前方法必须在新事务中执行

    示例:

    @Transactional(propagation = Propagation.REQUIRED)public void saveDept() {    insertLog();    saveDept();}

    3.Spring与Hibernate整合

    3.1 整合关键点

  • 将Hibernate的SessionFactory交给Spring管理
  • 交给Spring管理的事务控制
  • 配置示例:

    4.SSH整合

    4.1 整合需求

    • JSP页面显示员工信息(查询功能)

    4.2 整合步骤

  • 引入必要的SSH jar包
  • 配置Struts和Spring的整合
  • 配置Hibernate事务控制
  • 核心配置文件:

    4.3 开发流程

  • Entity/Dao/Service/Action层开发
  • 配置Hibernate映射文件
  • 配置Spring的事务管理
  • 通过以上配置,可以实现对Spring与Struts、Hibernate的高效整合,确保应用程序的高性能和可维护性。

    转载地址:http://lwayz.baihongyu.com/

    你可能感兴趣的文章
    python3 mysql 封装多表_python3 mysql-多表查询
    查看>>
    python3 mysql8_Python MySQL8.0 错误:authentication plugin 'calling_sha2_password' is not supported....
    查看>>
    Python关键代码总览!从Zero到Hero必看的考点
    查看>>
    python3 robotframework+pycharm框架搭建
    查看>>
    Python3 shutil模块
    查看>>
    Python关于strftime函数详细解析 附实战代码
    查看>>
    Python3 tutorial day3
    查看>>
    python3 week4
    查看>>
    Python3 创建数组
    查看>>
    python3 套接字异常(a byte-like object is required not str)
    查看>>
    python3 实现用户三次输入错误记录黑名单并对该用户登录锁定-day1
    查看>>
    python3 文本变图片
    查看>>
    Python3 查看 com 组件的属性
    查看>>
    python3 案例分享--发邮件
    查看>>
    python3 模板库_Python3 标准库概览_Python教程_我爱模板网 - 提供下载各种免费建站资源,免费网站模板,免费网页特效,让你爱上建站!...
    查看>>
    Python3 求最大/小值及索引值 Numpy
    查看>>
    python3+django使用celery执行某些任务失败的解决方案
    查看>>
    Python3+Requests+Unittest实战系列【一】
    查看>>
    python3+requests+unittest实战系列【一】
    查看>>
    python3+requests+unittest实战系列【二】
    查看>>