当前页面: 开发资料首页 → JSP 专题 → 请问大家什么是DAO?
请问大家什么是DAO?
摘要: 请问大家什么是DAO?
数据反问对象怎么弄呢?
是不是把数据库连接等各种增删改查询操作都封装在这个类里面?
一个数据类对应一个DAO?还是所有的数据类对应一个DAO?
DAO类具体怎么写?有没有实例贴出来小弟参考啊?
多谢了!
DAO就是数据访问对象,主要是用来进行表的CURD,一般是一个表对应一个DAO,当然也可以写个通用的。。这个看自己了。。
先定义一个DAO Interface
package com.ems.hibernate.dao;
import java.util.List;
import com.ems.database.hibernate3.pojo.Classroom;
public interface IClassroomDAO {
public abstract List query();
public abstract List findArrangeThings();
public abstract List findBuilding();
public abstract List findClassrooms(String building);
public abstract void save(Classroom transientInstance);
public abstract Classroom query(String pk);
public void del(String pk);
public abstract List find(String conditions);
}
然后写一个DAO implement
package com.ems.hibernate.dao.imp;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.ems.database.hibernate3.pojo.Classroom;
import com.ems.hibernate.dao.IClassroomDAO;
public class ClassroomDAO extends HibernateDaoSupport implements IClassroomDAO {
public List query() {
List classroom = getHibernateTemplate().find(
" from Classroom t order by no");
if (classroom.size() > 0) {
return classroom;
}
return null;
}
/**
* 得到每个教室安排的班级数和考试科目数列表
*/
public List findArrangeThings() {
String hql = "select a.pk, a.no, a.teachingBuilding, a.floor,a.seatAmount, b.classAmount, b.subjectAmount "
+ " from Classroom a,ExaminationRoomPlanRule b "
+ " where a.seatAmount >= b.seatRangeBegin and a.seatAmount < b.seatRangeEnd";
List classroom = getHibernateTemplate().find(hql);
if (classroom.size() > 0) {
return classroom;
}
return null;
}
/**
* 得到教学楼
*
* @return 教学楼
*/
public List findBuilding() {
String hql = "select distinct teachingBuilding as tb from Classroom ";
List building = getHibernateTemplate().find(hql);
if (building.size() > 0) {
return building;
}
return null;
}
/**
* 得到教学楼的所有教室
*/
public List findClassrooms(String building) {
String hql = "select a.pk, a.no, a.teachingBuilding, a.floor, a.seatAmount, b.classAmount, b.subjectAmount "
+ " from Classroom a,ExaminationRoomPlanRule b "
+ " where a.seatAmount >= b.seatRangeBegin and a.seatAmount <= b.seatRangeEnd and a.teachingBuilding = ?"
+ " order by b.classAmount desc,a.no ";
List classRooms = getHibernateTemplate().find(hql, building);
if (classRooms.size() > 0) {
return classRooms;
}
return null;
}
public void save(Classroom transientInstance) {
getHibernateTemplate().saveOrUpdate(transientInstance);
}
public Classroom query(String pk) {
String hql = " from Classroom where pk = ?";
List result = getHibernateTemplate().find(hql, pk);
if (result.size() > 0) {
return (Classroom) result.get(0);
}
return null;
}
public void del(String pk) {
try {
Classroom classroom = query(pk);
classroom.setIsntavile("N");
save(classroom);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public List find(String conditions) {
String hql = " from Classroom where " + conditions;
List result = getHibernateTemplate().find(hql);
if (result.size() > 0) {
return result;
}
return null;
}
}
我写的一个比较简单的,可以参考一下。。
一个数据类对应一个DAO
//书上看的例子
import java.util.List;
import com.testmail.cls.MailInfo;
public interface MailInfoDAO
{
//新增邮件地址信息
boolean createMailInfo(MailInfo mailInfo);
//根据主键mailId查找邮件地址信息
List findByMailId(String mailId);
//修改邮件地址信息
boolean editMailInfo(MailInfo mailInfo);
//删除邮件地址信息
boolean deleteByMailId(MailInfo mailInfo);
}
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import com.testmail.cls.MailInfo;
/*
* 继承Spring提供的HibernateDaoSupport类 并实现MailInfoDAO接口
*/
public class MailInfoDAOI extends HibernateDaoSupport implements MailInfoDAO
{
/*
*新建一条"邮件地址"信息
*/
public boolean createMailInfo(MailInfo mailInfo) {
try{
this.getHibernateTemplate().save(mailInfo);
return true;
}catch(DataAccessException ex){
ex.printStackTrace();
return false;
}
}
/*
*根据主键查找当前"邮件地址"信息
*/
public List findByMailId(String mailId) {
try{
return this.getHibernateTemplate().find(
"FROM com.testmail.cls.MailInfo AS MailInfo"
+"WHERE MailInfo.mailid='"+mailId+"'");
}catch(DataAccessException ex){
ex.printStackTrace();
return null;
}
}
/*
*修改当前"邮件地址"信息
*/
public boolean editMailInfo(MailInfo mailInfo) {
try{
this.getHibernateTemplate().saveOrUpdate(mailInfo);
return true;
}catch(DataAccessException ex){
ex.printStackTrace();
return false;
}
}
/*
*删除当前"邮件地址"信息
*/
public boolean deleteByMailId(MailInfo mailInfo) {
try{
this.getHibernateTemplate().delete(mailInfo);
return true;
}catch(DataAccessException ex){
ex.printStackTrace();
return false;
}
}
}
数据反问(访问)对象怎么弄呢?
答:就是数据库里面的表所对应的类,这个类里面的属性可以跟类的字段相关联(可以把他当成JAVABEAN看)
是不是把数据库连接等各种增删改查询操作都封装在这个类里面?
答:是
一个数据类对应一个DAO?还是所有的数据类对应一个DAO?
答:最好一个类对应一个DAO
DAO类具体怎么写?
答:上面的已经给出来了
数据反问(访问)对象怎么弄呢?
答:就是数据库里面的表所对应的类(O/R映射),这个类里面的属性可以跟表的字段相关联(可以把他当成JAVABEAN看)
写错别字了,=.=!
是的,那在DAO类中为啥看不见连接数据库的语句,或者是有我没看见?帮忙指出一下在哪里。因为本人没用过Hibernate,所以不太懂啊。呵呵。错别字是不小心的。下次改正!
是不是只要继承了HibernateDaoSupport,它本身就可以访问数据库?
Hibernate的配置文件hibernate.cfg.xml里面需要配置数据源
继承HibernateDAOSupport类后
getHibernateTemplate()方法返回的template对象有封装好的访问数据库方法
例如save delete 这是由hibernate框架提供的方法
DAO就是导,或者道,刀.
哦,大概知道了。但是我想把Hibernate和Struts结合,在设计的时候还是有很多问题。头痛。菜蛋可否加我QQ?我通常晚上会在线。我的QQ185849143。验证消息写“菜蛋”就好。多谢帮忙啊。有不懂得想和你交流一下。