到底DAO是什么?为什么要有它的存在?

DataAccessObject数据访问接口,就是访问数据库方法的interface

1.DAO用来封装DataSource的..就比如,Connectionconn=DAOFacotry.createConnection()..

就可以把Driver.URL.username,passpword这一些放在DAO中

以后要更改数据库的类型.比如要把MSSQL换成Oracle的话..只需要更改DAOFacory里面的createConnection()里面的Driver.URL.之类的..

2.DAO也是把对数据库的操作(比如最基本的CRUD操作)全部封装在里面..

比如说你要你要插入一个新的用户..那么.在DAO中我们只需要提供一个insertUser(Useruser)这一个方法就可以了..具体的操作是在DAO中实现的...

那么对于要调用DAO的时候.我们只要知道insertUser(User)是用来插入一个新的用户...而不需要知道是如何实现的..

下面是form的三个字段(也就是用户要输三个注册信息)

firstname

lastname

password

分别对应数据库中的三个字段:

firstname

lastname

password:password

当用用户提交了一个注册Form后我就得到了一个fromBean,在完成了对这个formBean的验证(validate)之后我的我的控制转到Action的execute(),到了这里我有两个选择:

*****************************************************************

1:当有没有用到DAO时我会直接在execute()中完成这个formBean对数据库的提交下面是我的伪码:

Sesseionsession=.....;

session.save(formBean);

*****************************************************************

2:当有用到DAO时是不是下面这样呢(我自己想的错了不要打我)

 a:先定义一个DAO

PublicclassUserDao{

privateStaticSessionsessioon=......;(定义一个静态的hibernatesession并initialize)

privateStringfirstName;

privateStringlastName;

privateStringpassword;

publicUserDao(StringfirstName,StringlastName,Stringpassword){

this.firstName=firstName;

this.lastName=lastName;

this.password=password;

}

publicUserDao(UserFormBeanuseBean){

this.firstName=useBean.firstName;

...

....

}

publicvoiddelUser(){

session.delete(this);

session.close();

}

publicvoidaddUser(){

session.saveorUpdate(this);

session.close();

}

.....

...

}

b:在Action中的execute()

UserDaouseDao=newUserDao(userFormBean);

useDao.save()

DAO一般是跟Factory和Abstract模式一起用的..

Factory来建立数据库和定位具体的DAO(比如说是UserDao..CustomerDao..)..

Abstract用来定义接口方法的比较:

publicinterfaceUserDao{

publicinsertUser(FormBean);

publicupdateUser(FormBean);

}

然后就实现DAO的接口:

publicclassUserDaoImplimplementsUserDao{

publicinsertUser(FormBean){

..//..

session.save(UserPO);

..//..

returnFormBean;

}

publicFormBeanupdateUser(FormBean){

..//..

session.update(UserPO);

..//..

returnFormBean;

}

}

最后定义你的PO:

publicclassUserPO{

Stringfirstname,lastname,password..........

}

相关推荐