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的事件模型中还是应用很广的。值得关注。