我試圖谷歌的答案,但我仍然困惑他們的關係。 我推測Hibernate是一種DAO。 我在維基百科查了DAO, DAODAO和hibernate之間的關係
但是發現沒有什麼和hibernate有關。那麼,兩者之間的關係究竟是什麼?一些例子會很棒!
我試圖谷歌的答案,但我仍然困惑他們的關係。 我推測Hibernate是一種DAO。 我在維基百科查了DAO, DAODAO和hibernate之間的關係
但是發現沒有什麼和hibernate有關。那麼,兩者之間的關係究竟是什麼?一些例子會很棒!
不,休眠是一個Object-Relational-Mapper(也見Object-relational impedance mismatch)。
DAO是一個獨立於技術的設計模式。在Java平臺上的DAO通常使用一個(通常只有一個)的下列技術:JDBC,Hibernate,JPA,JDO
所以,你可以使用Hibernate不使用的DAO(雖然它很少是個好主意),你當然可以創建DAO不使用Hibernate。儘管如此,大約50%的Java DAO類是使用普通的Hibernate或JPA與Hibernate作爲JPA提供者創建的。
DAO通常描述您的應用程序和底層數據庫之間的接口。 您可以通過使用Hibernate是的Object-Relational-Mapper實現這個功能。
不要以爲我能更好地描述它 - 對不起。
數據訪問對象就是這樣的:訪問數據的對象。它通常是執行一些業務功能的應用程序的接口層。 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);
}
}