2015-05-04 6 views
1

Прежде всего, этот вопрос может быть дубликатом Moving from hibernate to plain jdbc.Как создать приложение для простой замены Hibernate с помощью JDBC

Но поскольку этот вопрос не получил ответа, который я ищу, я снова спрашиваю его.

Предположим, у нас есть приложение, работающее с Hibernate, и мы решили изменить все его на запросы JDBC. (Hibernate-код и зависимости должны быть удалены полностью по какой-либо причине)

Каков логический способ сделать это? (Шаг за шагом в хронологическом порядке)

+0

Это очень зависит от приложения. – Kayaman

+0

Почему бы вам не попробовать JooQ вместо перехода на чистый JDBC? – fge

+0

@fge Речь идет не о оптимизации или переходе к лучшим решениям производительности, а о логическом порядке выполнения таких модификаций уровня данных. – Med

ответ

0

Как было отмечено в комментарии, это зависит само применение, но я постараюсь написать несколько шагов, которые я бы вообще:

1) Добавьте необходимые зависимости к вашему проекту (если вы хотите использовать простой JDBC, вы, вероятно, уже там, но если вы хотите использовать некоторые дополнительные рамки, этот шаг может понадобиться).

2) Определите все места в приложении, в которых вы используете Hibernate.

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

4) После перезаписи всех запросов удалите конфигурационные файлы hibernate (*.hbm.xml) и зависимости от вашего приложения.

5) Еще раз проверьте, что все работает правильно.

Я не уверен, почему вы хотите поменять местами от Hibernate до JDBC. Есть много преимуществ в использовании некоторой структуры ORM. Вы взглянули на некоторые другие рамки, которые могут подойти вам лучше?

iBatis (или myBatis), например, позволяет писать упрощенные SQL-запросы, и его довольно легко изучить.

+0

Спасибо! Я должен «смешивать» 2 приложения, один был разработан с JDBC-запросами, а другой - с Hibernate. И поскольку первый из них намного больше, мне легче держаться за JDBC. – Med

+0

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

1

Короткий ответ: Нет смысла.

Длинный ответ: Hibernate - это ORM, и поэтому он переводит entity state transitions в SQL-запросы. Такие вещи, как cascading, dirty checking, обрабатываются Hibernate, поэтому переход на JDBC означает, что вам придется делать это вручную.

Переключение ORM с использованием подхода ActiveRecord является архитектурным решением, которое имеет значительную стоимость разработки. Любая технология доступа к данным негерметична, поэтому вы не можете изолировать код доступа к данным, чтобы вы могли легко менять любую технологию. Из соображений производительности вы должны будете разработать свою модель данных и свои запросы, чтобы получить максимальную отдачу от своей базы данных.

Для приложений среднего бизнеса в любом случае вам понадобятся методы, специфичные для базы данных (например, CTE, функции окна, LATERAL), поэтому вам нужен собственный SQL в любом случае.

Итак, лучший подход - использовать как Hibernate, так и SQL вместо того, чтобы выбирать один или другой.

Чтобы дать ответ на ваш вопрос:

Вы можете проектировать интерфейсы DAO, так что вы всегда возвращают DTOs что означает, у вас есть две реализации:

  • Hibernate DAO
  • JDBC DAO

Таким образом, вы не сможете использовать сущности, потому что JDBC DAO не может легко получить деревья сущностей, поэтому вам нужно сделать это вручную в любом случае.

Использование Hibernate для проекций только поражает всю цель использования ORM, поэтому вы можете в первую очередь задать свое архитектурное решение.


+1

Ну, я думаю, я ответил на вопрос. Специальный слой DAO изолирует приложение от данных доступа к данным. Использование DTO делает возможным переход, и вы можете одновременно заменить один Hibernate DAO. В конце вы можете удалить Hibernate DAO и придерживаться JDBC. Таким образом, вы можете запустить 100% -ный уровень доступа к данным JDBC, но тогда выбор Hibernate был взят плохо, когда была разработана архитектура приложения. –

+0

Hibernate часть приложения должна быть полностью удалена. Интересно, как каскадная и ленивая загрузка может повлиять на запросы. – Med

+0

Если вы используете каскадирование при сохранении/слиянии объектов, то вам явно нужен способ справиться с этим с помощью JDBC. Если вы также извлекли деревья сущностей и опирались на загрузку LAZY, вам придется настроить каждый вариант использования для получения точной проекции. –

Смежные вопросы