Spring Data :: Обеспечение доступности методов репозитория в интерфейсах служб - PullRequest
0 голосов
/ 11 февраля 2019

Я использую Spring Data и JPA / Hibernate для своих репозиториев.Когда я расширяю JpaRepository, я получаю много методов как обычно, поскольку они реализуют PagingAndSortingRepository и CrudRepository.

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

Я хотел бы использовать те же имена методов, что и методы репозитория, а также не хочу вызывать свои репозитории напрямую из контроллеров.

Нужно ли копировать все сигнатуры методов изJpaRepository, PagingAndSortingRepository и CrudRepository в мои сервисные интерфейсы?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

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

Простое использование всех методов JpaRepository и делегирование Repository - это рецепт для массового дублирования кода, которого следует избегать.

Создайте Service в соответствии с требованиями вашего бизнеса.
Если вы чувствуете, что вам не нужно иметь промежуточное программное обеспечение для службы, возможно, потому что вы только получаете / устанавливаете данные, просто Autowire Repository внутриваш Controller.

Не всегда верно, что использование Repository внутри Controller неправильно.Это зависит.

0 голосов
/ 12 февраля 2019

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

Предположим, у вас есть UserRepository для домена с именем User и вы хотите найти пользователя по его / ее адресу электронной почты.Вместо создания findByEmail метода в отдельном сервисе, который расширяет UserRepository, просто объявите его в интерфейсе UserRepository:

User findByEmail(String email);

Spring Data JPA сделает всю грязную работу за вас.Вы можете вызвать этот метод, введя UserRepository внутри Controller (или других классов).

Выше приведен только простой пример.Вы даже можете объявить запрос с несколькими условиями:

User findByEmailOrUsername(String email, String username);

User findByEmailAndActiveTrue(String email);

List<User> findTop10ByEmail();

Я бы посоветовал вам изучить официальную документацию Spring Data JPA.Есть так много вещей, которые вы можете сделать, написав несколько строк кода.

0 голосов
/ 11 февраля 2019

Если я правильно понял вопрос. Сначала создайте репозиторий как интерфейс, расширяющий JpaRepository или другие, и не забывайте аннотировать ваш интерфейс с помощью @Repository.Затем создайте свой сервис и добавьте в него свой репозиторий, чтобы вы могли создавать свои собственные методы (можно использовать любое имя) в сервисе.Затем вы можете добавить сервис на ваш контроллер.Эта техника в основном используется.

...