博客
关于我
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/

    你可能感兴趣的文章
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 包管理器和 Node.js
    查看>>
    Python 单词字母顺序不变且所有倒排
    查看>>
    python 反射机制
    查看>>
    python 启动提示IDLE's subprocess didn't make conne...
    查看>>
    python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
    查看>>
    Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
    查看>>
    Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
    查看>>
    python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
    查看>>
    python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>