JPA - это спецификация, которая задает стандартный набор классов, методов, аннотаций, соглашений и т. Д., Используемых для отображения объектов Java в реляционную базу данных.
Hibernate является одной из реализаций этой спецификации.Он реализует все, что определено в спецификациях JPA.
Spring Data JPA - это среда, в которой используется JPA, и поэтому для ее использования требуется реализация JPA (Hibernate или любая другая).Это уровень абстракции, построенный на основе стандартных спецификаций JPA.
Почему разработчики используют Spring Data JPA (именно операции CRUD), если нам все еще нужно использовать HIBERNATE?
Поскольку Spring-Data-JPA упрощает использование JPA из приложения Spring и упрощает определение репозиториев: все основные операции, которые вам обычно приходится писать вручную, если вы не используете Spring-Data-JPA, уже реализованы для вас рамки.Основанный на соглашениях и декларативных запросах, он реализует методы для вас, и это делает вещи быстрее, безопаснее и менее громоздкими для записи.
Я не понимаю, как это работает.Как наш класс может выполнять операции CRUD, просто расширяя интерфейс
Он использует динамические прокси: во время выполнения он использует отражение для проверки всех дополнительных методов, определенных в интерфейсе репозитория, и создает динамический прокси,т.е. класс, который реализует этот интерфейс и использует стандартный API JPA для реализации методов, определенных в интерфейсе.Это относительно продвинутая тема.Google для "динамического прокси Java", чтобы вы начали.Но вы также можете просто использовать фреймворк, не имея возможности написать его самостоятельно, так же, как вы используете компьютер, не понимая, как работает электроника.