Весенние данные JDBC / Spring Data JPA vs Hibernate

каковы типичные сценарии реальной жизни, где можно было бы выбрать Spring Data JDBC / Spring Data JPA против Hibernate? Я хотел бы понять сценарии, где любая из этих реализаций лучше всего подходит.

3 ответов


Как сказал @Naros, вопрос, как он в настоящее время в названии, на самом деле не работает. Кажется, мы действительно должны посмотреть на 4 варианта и в основном перечислить плюсы каждого подхода, минусы-отсутствие плюсов другого:

JDBC без данных Spring

Вы получаете 100% мелкозернистый контроль над тем, что происходит. Фреймворк ничего не генерирует и не вводит. Это может звучать как мошенничество, но если вы пытались настроить сопоставления и конфигурации чтобы получить некоторую реализацию JPA, чтобы сделать то, что вы могли бы тривиально записать в java и SQL, вы поймете, что это может быть большой профессионал.

вам не нужно изучать JPA, ни весенние данные. Я лично думаю, что весенние данные просты, но я предвзят (см. Мой профиль). Но JPA, безусловно, является сложной задачей, как только вы покидаете область тривиальных сущностей и настроек.

  • нет требований, как вы моделируете модель домена (JPA требует конструкторов по умолчанию для пример)

вы, вероятно, хотите использовать некоторую библиотеку, чтобы сократить код шаблона. Взгляните на:

  • JOOQ

  • MyBatis

  • Spring JdbcTemplate (можно использовать без остальной части весны)

  • QueryDsl

JDBC с весенними данными

Вы получаете преимущества данных по весны, совмещенных с тем из JDBC (см. выше):

  • репозитории с методами CRUD из коробки.

  • хорошая интеграция в инфраструктуре Spring, для обработки транзакций, инъекции зависимостей ,перевода ошибок, подкачки...

  • это все еще очень простая модель программирования. Операторы SQL происходят именно тогда, когда их можно было бы ожидать, и если вы хотите, вы можете вернуться к простому JDBC с поддержкой или без поддержки других рамки, не нарушая никакой абстракции.

пока недоступно, вы получите еще больше вкусностей с будущими обновлениями:

  • хорошие и простые способы расширения ваших репозиториев с помощью методов запроса (вы просто определяете свой интерфейс, чтобы иметь findByLastName метод и весна генерирует его для вас на лету) или @query аннотации и пользовательские методы.

  • поддержка пейджинг

Hibernate (или какая-либо другая реализация JPA) без данных Spring

JPA делает много вещей над JDBC

  • кэширование (1-й, 2-й уровень, и запрос кэша)

  • автоматическое создание экземпляров из запросов

  • навигации между сущностями

  • загрузка

со всем этим бывает трудно понять, что происходит и почему. Конечно!--93-->IFF вы правильно структурируете свое приложение, вы можете просто вернуться к JDBC, если JPA не предлагает то, что вы хотите. Но я видел это несколько раз, что люди не смогли сохранить структуру, необходимую для этого. Очевидно, что это особенно сложно, если вы не понимаете должным образом, как работает JPA.

Hibernate (или некоторая другая реализация JPA) с весной Данные

Я перечислил преимущества данных Spring выше, просто выполните мысленную копию и вставку.

конечно, это делает полный стек еще более сложным. Из многих вопросов, помеченных spring-data и hibernate, кажется, у многих разработчиков есть проблемы с определением того, какой инструмент делает что. Но также из рассмотрения этих вопросов большинство описывают проблемы с Hibernate / JPA, а не данные Spring.

чтобы обернуть его вверх:

  • Если вам нужен / нужен мелкозернистый контроль, используйте JDBC.

  • Если вы собираетесь использовать JPA, убедитесь, что вы понимаете это на раннем этапе.

  • Если для технологии сохранения Вы выбираете Spring Data предлагает модуль, я бы использовал его. Это облегчит жизнь. Но опять-таки я пристрастен.


одна из проблем с вашим вопросом - Вы, похоже, подразумеваете, что Spring Data JPA похожа на Hibernate, и это на самом деле не так. Spring Data JPA-это просто пружинно-ориентированная оболочка, которая предлагает пружинящую семантику и функции, которые обертывают поставщика JPA, одной из реализаций которого является Hibernate.

Ergo, вы не можете использовать Spring Data JPA без включения некоторой реализации JPA, такой как Hibernate.

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

но даже в приложении, управляемом ORM, будут времена, когда у вас будут случаи, когда вам нужно обойти ORM framework и использовать собственный SQL, как и в JDBC. Эти случаи часто редки, но необходимы, когда вы хотите воспользоваться какой-либо неподдерживаемой функцией базы данных или где вы хотите иметь окончательный контроль над манипулирование результатами и т. д.

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


проверить requery.Ио, requery обеспечивает представление и ORM.

также проверить spring-data-requery