отношения между DAO и Hibernate - PullRequest
1 голос
/ 18 июля 2011

Я пытался гуглить ответ, но я все еще озадачен их отношениями.Я предполагаю, что Hibernate является своего рода DAO.И я посмотрел DAO в Википедии, DAO

Но обнаружил, что там нет ничего связанного с hibernate.Итак, каковы именно отношения между ними?Некоторые примеры будут великолепны!

Ответы [ 3 ]

10 голосов
/ 18 июля 2011

Нет, Hibernate является Object-Relational-Mapper (см. Также Несоответствие объектно-реляционного импеданса ).

DAO являетсяшаблон дизайна, который не зависит от технологии.DAO на платформе Java обычно используют одну (обычно только одну) из следующих технологий: JDBC , Hibernate , JPA , JDO

Таким образом, вы можете использовать Hibernate без использования DAO (хотя это редко бывает хорошей идеей) и вы, безусловно, можете создавать DAO без использования Hibernate.Тем не менее, около 50% всех классов Java DAO создаются с использованием простого Hibernate или JPA с Hibernate в качестве поставщика JPA.

3 голосов
/ 18 июля 2011

DAO обычно описывает интерфейс между вашим приложением и базовой базой данных.Вы можете реализовать эту функцию с помощью Object-Relational-Mapper, который является Hibernate.

Не думаю, что я могу описать это лучше - извините.

0 голосов
/ 02 октября 2014

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