Могу ли я заменить логику JDBC спящим - PullRequest
2 голосов
/ 13 февраля 2011

Я строю сайт с пружиной MVC.Поскольку я новичок в Java EE, мне сложно применять все сразу.

Итак, возможно ли, что я могу начать создавать приложение с простым JDBC и Spring, а затем заменить его на Hibernate?начать с сайта?

Ответы [ 3 ]

11 голосов
/ 13 февраля 2011

Только с (как минимум) двумя условиями:

  • вы полностью абстрагируете доступ к базе данных на уровне DAO. Каждый DAO должен иметь интерфейс и реализацию JdbcXDao. Позже вы можете добавить тот же HibernateXDao

  • ваш DAO должен возвращать доменные объекты. Никакие наборы результатов или операторы не должны выходить за пределы дао. Например, если вам нужно получить сообщения от данного пользователя, вы можете написать List<Message> messages = dao.getMessages(user).

Если что-либо из вышеперечисленного не выполнено, вам будет трудно перейти в спящий режим.

Но вполне вероятно, что у вас не хватит нервов изменить весь слой DAO впоследствии, поэтому потратьте еще немного времени на спящий режим и начните прямо с него.

6 голосов
/ 13 февраля 2011

Если JDBC - это все, что вам нужно для создания приложения, я не вижу никаких преимуществ в переписывании всего только для использования Hibernate .

Основная цель Hibernateчтобы избавить вас от необходимости писать повторяющийся код INSERT / UPDATE / DELETE / SELECT с помощью простого JDBC .И вы можете смешать PLAIN-JDBC с Hibernate и постепенно добавлять ORM в свое приложение, если вам это необходимо.

Сказав это, для простых вещей в базе данных, для вещей базы данных, которые нуждаются всложные запросы, я бы выбрал простой JDBC 1000 раз, прежде чем перейти к решению на основе Hibernate.

4 голосов
/ 13 февраля 2011

Да, конечно, вы можете.Это даже легко сделать, если вы напишите правильно.

Начните свой уровень персистентности с помощью интерфейсов;разрешите только своим клиентам вызывать объекты, которые являются ссылочными типами интерфейса.Поместите реализацию JDBC позади них сегодня;завтра вы можете переключиться на реализацию Hibernate, и ваши клиенты не станут мудрее.В этом прелесть интерфейсов.

Примерно так:

package persistence;

public interface FooDao
{
    List<Foo> find();
    Foo find(Long id);
    void saveOrUpdate(Foo foo);
    void delete(Foo foo);
}

Одна важная вещь, на которую следует обратить внимание: этот интерфейс имеет дело только с объектами модели, а не с SQL.Способ, которым ваш уровень персистентности взаимодействует с реляционной базой данных, начинается с объектной модели.Это требование для Hibernate.Это сразу становится обязательным для вашей реализации JDBC, если вы собираетесь когда-нибудь заменить его на Hibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...