到底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..........
}