2015-08-24 3 views
0

С этой информацией, когда мы создаем класс репозитория, лучше создать 1 класс и 2 интерфейса для одного репозитория UserRepository (интерфейс), UserRepositoryCustom (класс), UserRepositoryImpl (интерфейс).Почему мы должны создавать класс xxxCustom и xxxImpl при создании репозитория?

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

Но мы можем создать класс репозитория без этих классов ... Поэтому нам нужно создать эти классы, и что это заслуга (или недостаток), если мы создаем эти классы?

+1

Что вы подразумеваете под «мы можем создать класс репозитория без этих классов»? Если я правильно понимаю ваш вопрос, вы создаете 2 интерфейса '' 'UserRepository и UserRepositoryCustom''' и 1 класс' '' UserRepositoryImpl'''. Мы никогда не создаем 3 класса. –

+0

@NitinArora да, вы правы. Мой вопрос в том, почему нам нужно создавать эти интерфейсы. –

ответ

2

Если проверка на core concepts, UserRepository определения интерфейса Spring Data, который проходит CrudRepository или JPAReposiory предоставляет вам все основные операции CRUD бесплатно на сущности для.

public interface UserRepository extends JpaRepository<User, Long> 

Вы можете добавить свои собственные основные пользовательские запросы в этом хранилище интерфейс с использованием naming convention approach или с помощью @Query attribute.

В случае, если вы хотите выполнить какую-то пользовательскую логику, которую невозможно легко управлять и определять в UserRepository, например. сложных объединений и хранимой процедуры, и вам нужен доступ к базовому EntityManager вам нужен интерфейс UserCustomRepository. UserRepository расширит этот интерфейс для наследования методов.

public interface UserRepository extends JpaRepository<User, Long>, UserCustomRepository { 
    void myCustomMethod(); 
} 

Вам необходимо обеспечить реализацию этих методов самостоятельно в классе UserRepositoryImpl. Данные Spring ищут реализацию пользовательского метода в этом классе и вызывают их при их вызове.

Надеюсь, это объяснение поможет.

+0

Я понял, что класс репозитория - это класс интерфейса, а не class.thus, это не способ добавить новый метод с некоторой логикой. Вот почему нам нужно создать пользовательский класс –