DAO和hibernate之间的关系

时间:2011-07-18 14:28:32

标签: java hibernate dao

我试图谷歌答案,但我仍然对他们的关系感到困惑。 我推测Hibernate是一种DAO。 我在维基百科中查找了DAO, DAO

但发现那里没有与hibernate相关的东西。那两者之间的关系到底是什么?一些例子会很棒!

3 个答案:

答案 0 :(得分:10)

不,Hibernate是Object-Relational-Mapper(另见Object-relational impedance mismatch)。

DAO是一种独立于技术的设计模式。 Java平台上的DAO通常使用以下技术中的一种(通常只有一种):JDBCHibernateJPAJDO

所以你可以在不使用DAO的情况下使用Hibernate(尽管它很少是一个好主意),你当然可以在不使用Hibernate的情况下创建DAO。然而,大约50%的Java DAO类是使用普通的Hibernate或JPA和Hibernate作为JPA提供者创建的。

答案 1 :(得分:3)

DAO通常描述应用程序与底层数据库之间的接口。 你可以使用一个Object-Relational-Mapper来实现这个功能 - 它是Hibernate的。

不要以为我能更好地描述它 - 抱歉。

答案 2 :(得分:0)

数据访问对象就是:用于访问数据的对象。它通常是执行某些业务功能的应用程序的接口层。 DAO可以使用休眠与数据库通信,从文件读取,与远程资源通信或其他任何内容。关键是应用程序的上层不知道或不需要关心。

Hibernate只是实现DAO的众多方式之一。

public interface BusinessOperation {
    public String bestVehicle(String show);
}

// Hibernate implementation of DAO
public class HibernateBusinessOperation implements BusinessOperation {
    @Override
    public String bestVehicle(String show) {
        String sql = "FROM show where show_name = :show";
        Query query = getSession().createQuery(sql);
        query.setString("show", show);
        Show queryResult = (Show) query.uniqueResult();
        if (queryResult == null)
          throw new InvalidShowException(show);
        return queryResult->getBestVehicle();
    }
}

// Test implementation of DAO
public class TestBusinessOperation implements BusinessOperation {
    @Override
    public String bestVehicle(String show) {
        if ("Knight Rider".equals(show)) {
            return "KITT";
        }
        if ("Airwolf".equals(show)) {
            return "Airwolf";
        }
        throw new InvalidShowException(show);
    }
}