проект The Spring Data в целом является зонтичным проектом со следующей миссией:
... обеспечить знакомую и единообразную Spring на основе модели программирования, сохраняя при этом хранить специфические функции и возможность.
Таким образом, мы приближаемся к пространству сохранения в целом, а не только к реляционным данным через JPA. Важная часть здесь два раза:
- модель программирования вместо общего API
- Поддержка магазина особенности
Поскольку пространство для доступа к данным настолько многообразные в эти дни, пытаясь приблизиться все магазины с единым унифицирующим API обречены на провал. В конечном итоге вы получите наименьший общий знаменатель, который скрывает определенные части магазина - в тех случаях, когда вы выборочно выбираете конкретный магазин , потому что его особенностей. Абстрагирование этих сторон полностью подрывает это. На наш взгляд, особенно попытка использования JPA является неправильной, поскольку она глубоко связана с реляционными концепциями (, объединениями, транзакциями) по определению.
Тем не менее, вы не хотите работать с совершенно разными API-интерфейсами, не хотите потерять различия в хранении, если работаете с несколькими или переключаетесь с одного проекта на другой. Весна традиционно помогала в этом отношении, охватывая согласованную модель программирования, в которой есть абстракции, которые работают одинаково, но все же специфичны для конкретной технологии. Например, JDBC и JMS - это совершенно разные технологии. Spring предлагает как JdbcTemplate
, так и JmsTemplate
, которые отвечают тем же обязанностям (управление ресурсами и перевод исключений) и уменьшают кривую обучения при переходе от JDBC к JMS или наоборот.
Spring Data берет на себя это, раскрывая специфику магазина, используя абстракции, которые знают разработчики Spring. Я уже упоминал шаблон, но также включает общие механизмы конфигурации (пространства имен XML, используя DI и AOP и т. Д.).
Хранилища
Самый верхний слой этой модели программирования является хранилищем абстракции. В своей основе он значительно упрощает разработку уровней доступа к данным, позволяя вам избежать необходимости писать больше кода реализации, чем это необходимо. Он предоставляет функции CRUD из коробки, разбивки на страницы, а также декларативные методы запросов.
Предположите Customer
класс домена.Включение упорства для него это всего лишь вопрос того, чтобы объявить репозиторное интерфейс, как это:
interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {
List<Customer> findByLastnameContaining(String lastname);
}
Теперь это вопрос конфигурации (и отображение домена класса), чтобы иметь возможность создать экземпляр этого интерфейса и использовать его из клиент. PagingAndSortingRepository
включает в себя базовую функциональность CRUD, а также такие вещи, как Page<Customer> findAll(Pageable pageable)
(поэтому по каждому доступ к странице). Как вы можете видеть, мы также поддерживаем механизм вывода запроса, чтобы избежать необходимости писать код реализации для простых запросов. Для более сложных мы разрешаем объявление вручную (например, используя метод @Query
) или даже ручную реализацию, если это необходимо.
Приятный побочный эффект здесь заключается в том, что с помощью флип-переключателя в конфигурации вы можете использовать один и тот же интерфейс репозитория для сохранения Customer
экземпляров в MongoDB. Это не означает, что мы рекомендуем слепо перемещаться из одного магазина в другой, поскольку магазины обычно требуют, чтобы модель данных была адаптирована для эффективной работы. Однако он позволяет разработчикам быстро переключаться между проектами, работающими с разными магазинами, поскольку репозитории работают одинаково (реализуя модель программирования по общему API-интерфейсу).
Специфические JPA
Spring Data JPA на самом деле тонкий слой реализации абстракции хранилища плюс несколько других наворотов. Таким образом, мы не заменяем поставщиков персистентности, но фактически используем их через API, даже уменьшая некоторые из особенностей и различий между отдельными поставщиками JPA.
Вы спрашиваете о Spring Data JPA? – dhamibirendra
yea this spring data jpa: http://projects.spring.io/spring-data-jpa/ – user1099123
Spring Data JPA автоматически реализует общие методы доступа к данным JPA для вас, основанные только на объектах Entity. Он основан на реляционном сопоставлении объектов Grails (GORM) и использует те же соглашения. Имена автоматически созданных методов также описывают, как вернется метод. Если у вас есть объект Foo с панелью свойств и вы хотите найти все Foos определенного бара, вы просто вызываете автоматически созданный метод Foo.findByBar(). Предположим, у Foo есть свойство dateCreated, и вы хотите найти все созданные Foos в определенный таймфрейм, использовать Foo.findByDateCreatedBetween (firstDate, secondDate) –