我试图谷歌答案,但我仍然对他们的关系感到困惑。 我推测Hibernate是一种DAO。 我在维基百科中查找了DAO, DAO
但发现那里没有与hibernate相关的东西。那两者之间的关系到底是什么?一些例子会很棒!
答案 0 :(得分:10)
不,Hibernate是Object-Relational-Mapper(另见Object-relational impedance mismatch)。
DAO是一种独立于技术的设计模式。 Java平台上的DAO通常使用以下技术中的一种(通常只有一种):JDBC,Hibernate,JPA,JDO
所以你可以在不使用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);
}
}