到底DAO是什么?为什么要有它的存在?
Data Access Object 数据访问接口,就是访问数据库方法的 interface
1. DAO用来封装Data Source的..就比如,Connection conn = DAOFacotry.createConnection()..
就可以把Driver. URL. username, passpword这一些放在DAO中
以后要更改数据库的类型.比如要把MSSQL换成Oracle的话..只需要更改DAOFacory里面的createConnection()里面的Driver.URL.之类的..
2. DAO也是把对数据库的操作(比如最基本的CRUD操作)全部封装在里面..
比如说你要你要插入一个新的用户..那么.在DAO中我们只需要提供一个insertUser(User user)这一个方法就可以了..具体的操作是在DAO中实现的...
那么对于要调用DAO的时候.我们只要知道insertUser(User)是用来插入一个新的用户...而不需要知道是如何实现的..
下面是form的三个字段(也就是用户要输三个注册信息)
firstname
lastname
password
分别对应数据库中的三个字段:
firstname
lastname
password:password
当用用户提交了一个注册Form后我就得到了一个fromBean,在完成了对这个formBean的验证(validate)之后我的我的控制转到Action的execute(),到了这里我有两个选择:
*****************************************************************
1:当有没有用到DAO时我会直接在execute()中完成这个formBean对数据库的提交下面是我的伪码:
Sesseion session=.....;
session.save(formBean);
*****************************************************************
2:当有用到DAO时是不是下面这样呢(我自己想的错了不要打我)
a: 先定义一个DAO
Public class UserDao{
private Static Session sessioon=......;(定义一个静态的hibernate session 并initialize)
private String firstName;
private String lastName;
private String password;
public UserDao(String firstName,String lastName,String password){
this.firstName=firstName;
this.lastName=lastName;
this.password=password;
}
public UserDao(UserFormBean useBean){
this.firstName=useBean.firstName;
...
....
}
public void delUser(){
session.delete(this);
session.close();
}
public void addUser( ){
session.saveorUpdate(this);
session.close();
}
.....
...
}
b:在Action中的execute()
UserDao useDao=new UserDao(userFormBean);
useDao.save()
DAO一般是跟Factory和Abstract模式一起用的..
Factory来建立数据库和定位具体的DAO(比如说是UserDao..CustomerDao..)..
Abstract用来定义接口方法的比较:
public interface UserDao {
public insertUser(FormBean) ;
public updateUser(FormBean);
}
然后就实现DAO的接口:
public class UserDaoImpl implements UserDao {
public insertUser(FormBean) {
..//..
session.save(UserPO);
..//..
return FormBean;
}
public FormBean updateUser(FormBean) {
..//..
session.update(UserPO);
..//..
return FormBean;
}
}
最后定义你的PO:
public class UserPO {
String firstname, lastname, password..........
}