2016-05-03 2 views
33

Хотя я и не начинаю, я пытаюсь изучить весеннюю структуру (снова!), Чтобы быть уверенным, что я действительно это понимаю. У меня есть справедливое представление о ядре Spring (DI). Теперь я фокусируюсь на слое данных.Весна + спящий против весны Данные JPA: Разные?

Я натолкнулся на термин «Весна и спящий режим». Как я могу понять, это означало бы использование Spring Framework с Hibernate в качестве инструмента ORM/JPA.

Теперь я столкнулся с "Весна данных JPA". Я разъяснил SO о Spring Data JPA, что это слой абстракции поверх JPA (и под капотом Spring Data JPA использует Hibernate или любой другой поставщик JPA).

Теперь эти термины такие же? То есть, "Весна + спящий режим" то же, что и у "Весна данных JPA". Если нет, то в чем разница/сходства?

Я действительно смущен тем, что многие термины/утверждения (например, выше) кажутся похожими, но могут быть разными.

ответ

43

Spring-data-jpa, как вы говорите, предлагает больше, чем просто классическую интеграцию Spring-JPA. С интеграцией JPA/Hibernate, вы получаете в основном

  • декларативного управления транзакциями с использованием JPA/Hibernate транзакции
  • исключение перевод
  • JPA EntityManager или Hibernate SessionFactory, как инъекционные бобы

С пружинными data-jpa, вы получаете все это, плюс (помимо всего прочего)

  • interfa CE-только хранилищами, используя имена методов для вывода запросов автоматически
  • @Query аннотаций для определения запроса, что метод интерфейса должен возвращать
  • автоматической обработки выгружаемых запросами
  • базовых классов для стандартного Crud хранилищ

Это всего лишь крошечное введение. Для получения дополнительной информации прочитайте документацию.

+2

Большое спасибо за Ваш ответ. Поэтому, когда мы видим «Spring + Hibernate», это означает, что Spring использует Hibernate напрямую, тогда как, когда мы видим «Spring Data JPA», это означает использование весенних данных. Jpa-абстракция и поставщик jpa могут быть любыми (например, Hibernate, eclipselink и т. Д.). И данные Spring jpa предлагает больше предложений, немногие из которых вы уже упоминали в своем ответе. – CuriousMind

+4

Да. Но вы также можете использовать Spring с любым поставщиком JPA, не используя Spring-data-jpa. –

+1

Большое спасибо за разъяснение этого сомнения. Цените много своего времени. – CuriousMind

5

, когда вы говорите о весне + зимуют

  1. Если вы читали зимуют в одиночку, вы бы поняли, это использует отображение (которое в основном конфигурации для отображения POJO с отношений базы данных) и конфигурации (конфигурации, характерные для базы данных, как драйвер класс, url, имя пользователя, пароль, диалект и т. д.).
  2. Итак, если вы хотите использовать чтение, запись, обновление и т. Д., Вы должны получить hibernatesessionfactory, открыть транзакцию и совершить. Много предварительных и почтовых работ для каждой операции.
  3. Когда вы интегрируете спящий режим с пружиной, пружина использует эту конфигурацию и сохраняет ее в контексте приложения и предоставляет обертку, которая является hibernatetemplate, которая внутренне использует hibernatesessionfactory. Поэтому при выполнении этих операций вам не нужно много заботиться о пред и почтовом коде.
  4. Он также предоставил кеширование (кеш первого и второго уровня) для повышения производительности.
  5. А также дает вам возможность работать с HQL, который не зависит от базы данных. Он использует диалект базы данных для генерации базы данных, специфичной для SQL.

Теперь давайте поговорим о пружинных + данных JPA

  1. поставляется с интерфейсами базового хранилища (от весенних данных общих, весна JPA)
  2. Так предположим, что вы заинтересованы в этом операцию Crud, просто продлить crud repository, а весна будет внедрять ее реализацию во время выполнения.
  3. Предположим, вы хотите определить общий метод для своего приложения, вы можете сделать это, создав новый интерфейс репозитория, который расширяет интерфейс Repository. И можете использовать это через приложение.
  4. Он также предоставляет методы запроса, которые позволяют использовать нативные sql or jpql.