Объект доступа к данным - это просто объект доступа к данным. Обычно это интерфейсный уровень приложения, выполняющий некоторую бизнес-функцию. DAO может использовать hibernate для общения с базой данных, чтения из файла, общения с удаленным ресурсом или чего-либо еще. Дело в том, что верхние уровни приложения не знают или не нуждаются в уходе.
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);
}
}