DAO编程初学

http://blog.csdn.net/lxxstarii/archive/2006/03/03/614642.aspx

DAO编程
一个典型的DAO实现有下列几个组件:

  1. 一个DAO工厂类;

  2. 一个DAO接口;(用接口,如果更改实现接口的数据库连接,只需改动或增加一个实例,改变接口实现方法就行。)

  3. 一个实现DAO接口的具体类;

  4. 数据传递对象(有些时候叫做值对象).

具体的DAO类包含了从特定的数据源访问数据的逻辑。
在下面的这段中你将学到设计和实现数据访问对象的技术。

J2EE规范为事务划分描述了两种模式:编程性事务(programmatic)和声明性事务(declarative)。

一个典型的DAO要执行象创建、更新、和删除这的事务性操作

在设计一个DAO时,首先要问自己如下问题:

  1、 事务将怎样开始?

  2、 事务将怎样结束?

  3、 那个对象将承担起动一个事务的责任?

  4、 那个对象将承担结束一个事务的责任?

  5、 DAO应该承担起动和结束事务的责任?

  6、 应用程序需要交叉访问多个DAO吗?

  7、 一个事务包含一个DAO还是多个DAO?

  8、 一个DAO包含其它的DAO中的方法吗?


1、实体类层,即Item,带有domain logic的domain object
2、DAO层,即ItemDao和ItemDaoHibernateImpl,抽象持久化操作的接口和实现类
3、业务逻辑层,即ItemManager,接受容器事务控制,向Web层提供统一的服务调用

ItemDao定义持久化操作的接口,用于隔离持久化代码。
ItemDaoHibernateImpl完成具体的持久化工作,请注意,数据库资源的获取和释放是在ItemDaoHibernateImpl里面处理的,每个DAO方法调用之前打开Session,DAO方法调用之后,关闭Session。(Session放在ThreadLocal中,保证一次调用只打开关闭一次)

 

两种数据操作的DAO
public void createWarehouseProfile(WHProfile profile)
public void updateWarehouseStatus(WHIdentifier id, StatusInfo status);

刚才关注takecare(大厅)搜索到的一贴,接口当指针使(详细可以参考Java与设计模式):

import java.io.*;
interface call
{
public void callme();
}

class inst implements call
{
public void callme()
{
System.out.println("Call inst");

}


}

public class callback
{
static void  run(call cc)
{
cc.callme();
}

public static void  main(String[] args)
{

run(new inst());

}

}

 

 


一个更为完整的实现。
import java.io.*;
 interface call
{
 
public void proc(sender src,int wparam);


}

class sender
{
protected call ie;

public sender(call event)
{
ie=event;
}
public void nofify(int wparam)
{

ie.proc(this,wparam);


}

 


}

class receiver implements call
{

 

public void proc(sender src,int par)
{
  
 System.out.println(src);
 System.out.println(par);

}


}
class sandr extends sender
implements call
{   

   
public sandr(call event)
{
super(event);

       
}


   public void proc(sender src,int par)
{
    
 System.out.println(src);
 System.out.println(par);

}

 

}
public class callback
{


public static void  main(String[] args)
{
   sandr s1=new sandr(null);
   sandr s2=new sandr(s1);
   s2.nofify(10);
   s1.proc(s2,10);
   s2.proc(s1,10);

}

}


这在Java的事件模型中还是应用很广的。值得关注。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值