DAO设计-原理和实现

 DAO设计-原理和实现


DAO的事务

一 DAO模式简介
1 为什么要使用DAO
分离数据访问逻辑和业务逻辑
2 DAO的组成
DAO工厂类,DAO接口,实现DAO接口的具体类,VO
3 设计DAO要注意的问题
哪个对象负责开始事务,哪个负责事务结束?应用程序是否需要通过多个DAO访问数据?事务涉及一个DAO还是多个DAO?一个DAO是否调用另一个DAO的方法?
有两种界定事务的方法,一种是在DAO内部实现事务代码,另一种是在调用DAO的对象内部实现。

二 实现事务
1 JDBC实现方式:
 主要是setAutoCommit方法

这种方式的缺点是:只对单个连接起作用,并且不能跨数据库

2 JTA 实现方式
 JTA事务可以有多个参与者,多个数据库。它就是把事务的管理交给服务器实现,让开发人员集中精力进行业务开发。
 
 注意:如果计划用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。您将需要用应用服务器的管理工具设置 XADataSource 。从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。

三 如何选择
如果是JDBC的DAO,通常是:
· 事务界定代码嵌入在 DAO 类中。
· DAO 类使用 JDBC API 进行事务界定。
· 调用者不能界定事务。
· 事务范围局限于单个 JDBC 连接。
如果是JTA,通常是:
· 事务用 JTA 界定。
· 事务界定代码从 DAO 中分离出来。
· 调用者负责界定事务。
· DAO 加入一个全局事务。
区别就是从哪里实现DAO,这个就是DAO的事务设计原则


原文链接:http://www-128.ibm.com/developerworks/cn/java/j-dao/


实际的dao设计如下:

1。接口,提供数据库操作接口给业务层使用。程序员应该设计好这个接口。例如CD类的操作接口和Movie类的操作接口

2。DAO的实现类,封装数据库逻辑。代码略

3。DAO的工厂类,用于返回接口。代码略

4。util类。用于封装所有关于数据库的操作。把Connection的获取,语句的关闭等放在这个类更好。
通常的设计把数据库的代码放到DAO的实现类中,这样如果某个DAO实现类设计不良,要改动就必须牵涉到很多地方,不利于维护。
一个典型的util可能如下:

这样,就不用在DAO的内部取得连接。方便了维护和修改。并且这个DAOUtil,也能够获得好的重用性

这样能很方便实现人员分工

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值