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

JDBC分层事务管理机制

阅读更多
虽然ORM框架在J2EE应用中大行其道,但是使用JDBC直接访问数据库方式因其简单和强大而在许多时候对开发者极具诱惑力。
正在装载数据……
尤其在复杂的多表关联集合操作的时候,ORM框架大多显得笨拙并且力不从心,而一条使用统计函数的sql语句却可以直接搞定。因此通常在我设计J2EE应用程序架构的时候会在持久层框架中保留两种访问数据库的方式――Hibernate和JDBC。

基于J2EE分层架构设计思想,数据访问层应该专门处理数据访问,而业务逻辑则在业务逻辑层中处理。为了提高复用,数据访问层对象(DAO)的粒度通常都非常小,一个更新操作被封装在一个方法中,这样当有多个更新操作需要被捆绑为一个事务的时候,事务的处理只能在业务逻辑层中实现。

在不分层的情况下,一个典型的JDBC事务处理代码片断如下。
try {
conn =DriverManager.getConnection  
("jdbc:oracle:thin:@host:1521:SID","username","userpwd";
conn.setAutoCommit(false);//禁止自动提交,设置回滚点
stmt = conn.createStatement();
stmt.executeUpdate(“alter table …”); //数据库更新操作1
stmt.executeUpdate(“insert into table …”); //数据库更新操作2
conn.commit(); //事务提交
}catch(Exception ex) {  
         ex.printStackTrace();
         try {
              conn.rollback(); //操作不成功则回滚
         }catch(Exception e) {
e.printStackTrace();
         }
}

分层的JDBC事务机制通过TransactionController和TransactionControllerFactory两个类来进行事务管理。数据访问层的更新操作都添加到TransanctionController中,在业务逻辑层中将事务commit。业务逻辑层和数据访问层通过TransactionControllerFactory来获得同一个事务控制器TransactionController。

事务控制器TransactionController接口代码
public interface TransactionController {
              public void add(DataAccessor da){} //将数据库操作的具体实现DataAccessor添加到事务控制器

              public int execute() throws SQLException{} //commit事务,如果异常,rollback。
}

事务控制器工厂TransactionControllerFactory实现类代码
public class TransactionControllerFactory{
              public static final ThreadLocal session = new ThreadLocal();
              /**
               * 启动TransactionController
               */
              public static TransactionController currentController() {
                            TransactionController ts = (TransactionController) session.get();
                            if (ts == null) {
                                          ts = new TransactionController ();
                                          session.set(ts);
                            }
                            return ts;
              }
              /**
               * 结束TransactionController
               */
              public static void closeController() {
                            session.remove();
              }
}

业务逻辑层代码举例

Test1Dao test1Dao = new DaoFacotory.getTest1Dao();
Test2Dao test1Dao = new DaoFacotory.getTest2Dao();
TransactionController tc = TransactionControllerFactory.currentController();
test1Dao.insertStaff (staff);
test2Dao.updateGroup(group)
tc.execute();

数据访问层代码举例
Public class Test1Dao{
Public void insertStaff(Staff staff){
        TransactionController tc = TransactionControllerFactory.currentController();
              DataAccessor da = DataAccessorFactory.getDataAccessor(…);//获取数据库操作实例DataAccessor
              da.setParameter(….);//设置DataAccessor参数
              tc.add(da);//将数据库操作实例添加到事务控制器


分享到:
评论
1 楼 xingwei4225 2010-01-16  
请问楼主,你的数据库连接是在业务层取得的吗?

相关推荐

    学生管理系统数据库版_控制台_软件分层

    《学生管理系统数据库版_控制台_软件分层》是一个基于Java技术实现的系统,它主要关注于数据库管理和控制台交互。这个系统的核心功能是实现对学生数据的增删改查(CRUD)操作,并且具备数据库事务处理能力,尤其是...

    JAVA设计模式之事务处理.pdf

    Java技术体系中的J2EE(Java 2 Enterprise Edition)提供了强大的事务管理机制——JTA(Java Transaction API),支持跨资源的事务管理。然而,在许多实际应用场景中,应用往往只需要处理单一的数据源(通常是数据库...

    jdbc学习文档

    - **JTA**:Java Transaction API,提供更高级别的分布式事务管理。 **7.6 数据库的隔离级别介绍** - **未提交读**:最低隔离级别,可能读取到脏数据。 - **提交读**:可以避免脏读,但可能出现不可重复读。 - **...

    传智播客视频Jdbc学习笔记

    ### 传智播客JDBC学习笔记精要 #### JDBC简述与连接 ...综上所述,传智播客的JDBC学习笔记涵盖了从基础的数据库连接到高级的事务管理、连接池优化等多个层面的内容,是Java开发者学习和掌握JDBC技术的重要参考资料。

    appfuse-light-webwork-spring-jdbc-1.8.2.zip_Java 8_appfuse_webwo

    Spring框架与JDBC的结合,使得数据库操作更加方便和灵活,同时提供了事务管理和连接池等功能。 该压缩包中的文件名表明这是一个完整的项目结构,包括源代码、配置文件和可能的测试用例。开发者可以通过研究这个项目...

    基于springboot的高校办公室行政事务管理系统源码数据库.doc

    ### 基于SpringBoot的高校办公室行政事务管理系统 #### 一、系统概述与背景 在信息化快速发展的今天,高效地管理和处理各种行政事务成为各高校办公室的重要任务之一。随着业务量的增加以及数据处理复杂性的提升,...

    spring05-5

    4. **事务管理**:Spring的事务管理支持声明式和编程式两种方式。在注解驱动的配置中,可以通过`@Transactional`注解在方法或类级别声明事务边界。这样,Spring会自动处理事务的开启、提交和回滚,确保数据的一致性...

    spring4.0 api

    7. **事务管理**:Spring的事务管理支持编程式和声明式两种方式,可以在任何支持的事务管理器上工作,如JTA、DataSourceTransactionManager等。声明式事务管理通过注解或XML配置实现,使得事务控制更为简便。 8. **...

    spring面试题集

    Spring的事务管理提供了强大且灵活的机制,主要包括编程式和声明式两种方式: 1. 编程式事务管理:通过TransactionDefinition、TransactionStatus和PlatformTransactionManager接口进行事务的控制。例如,可以使用...

    SSH框架源代码

    3. **事务管理**:Spring的事务管理机制保证了数据操作的完整性。 4. **ORM支持**:Hibernate提供了便捷的数据访问,减少了与数据库的直接交互。 在实际开发中,"jspoa"可能包含了JSP页面,这些页面通常用于展示...

    Spring核心技术文档

    Spring的核心技术主要包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)、容器和服务、数据访问以及事务管理等方面。 1. **依赖注入(DI)**:Spring框架的核心特性之...

    精通Spring+4.x++企业应用开发实战 源码

    4. **Spring JDBC与事务管理**: - **JDBC模板**:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,简化了数据库操作,避免了重复的JDBC代码。 - **事务管理**:Spring支持编程式和声明式事务管理,通过@...

    TongWeb5.0.1.1用户使用手册

    - **改进的事务管理**: 提供了更强大的事务管理功能,支持多种事务传播行为。 **1.3 TongWeb5.0的体系结构** TongWeb5.0采用了分层的架构设计,主要包括以下几个层次: - **容器层**: 包括Web容器、EJB容器、JMS...

    Spring技术内幕:深入解析Spring架构与设计原理(第2版)

    Spring AOP允许开发者将横切关注点(比如日志、事务管理等)从业务逻辑代码中分离出来,通过声明式事务管理和AspectJ等机制,在不修改源代码的情况下为程序添加额外的行为。AOP的实现有助于提高模块化,使得开发者...

    Java Web图书管理系统(附上MySQL数据库)

    例如,使用异常处理机制来捕获运行时错误,通过事务管理确保数据的一致性,以及利用角色和权限分配控制不同用户的操作权限。 总结来说,这个Java Web图书管理系统运用了丰富的Java Web技术和数据库管理知识,通过...

    ibatis培训教程

    - JDBC: 使用标准的JDBC事务管理。 - MANAGED: 由应用服务器管理事务。 #### 三、持久化操作 (Chapter 3: Persistence Operation) - **基本概念**: - **持久化**: 将程序中的数据保存到外部存储设备的过程。 -...

    参考文档-基于J2EE的财务管理系统设计与实现.zip

    3. **事务管理**:J2EE平台支持分布式事务处理,这对于财务系统尤为重要,确保了在并发操作下的数据一致性。 4. **安全性**:J2EE提供了强大的安全机制,包括用户认证、授权和加密等功能,保障财务数据的安全。 5....

Global site tag (gtag.js) - Google Analytics