2013-03-22 1 views
0

Мое требование таково: мне нужно создать интерфейс AccountRepository, и мне нужно реализовать все методы в моем AccountRepositoryImpl, так как я могу это сделать?с использованием Spring DATA для реализации DAO

Пример:

1) Интерфейс

/* this is the interface */ 
public interface AccountRepository extends JpaRepository 
{ 
    List<Account> getAllAccounts(); 
} 

2) осуществление?

public class AccountRepositoryImpl implements AccountRepository 
{ 
    public List<Account> getAllAccounts() { 
     // now what? 
    } 
} 
+1

У вас есть интерфейс, теперь реализующий его. Вы знаете java? Ваш класс 'AccountRepositoryImpl' должен« реализовать AccountRepository » –

+0

Это то, что вам нужно? http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/repositories.html#repositories.single-repository-behaviour –

+2

@Sotirios: фактически весной Данные разработчик не " t реализовать интерфейс. –

ответ

12

Точка Spring Data это вы не реализации Repository. Как правило, это не так. Вместо этого типичное использование заключается в том, что вы предоставляете интерфейс, а Spring внедряет некоторую реализацию, которую вы никогда не видите.

Самый простой материал (findOne, findAll, save, delete и т. Д.) Берется автоматически, расширяя org.springframework.data.repository.CrudRepository. Этот интерфейс предоставляет имена методов для вас.

Тогда есть случаи, когда вы можете написать подпись метода, чтобы Spring Data знал, что выбрать (аналогично концепции GORM, если вы знаете Grails), это называется «создание запроса по именам методов». Вы можете создать метод в интерфейсе, как это (копирование an example from the spring data jpa documentation):

List<Person> findByLastnameAndFirstnameAllIgnoreCase(
    String lastname, String firstname); 

и Spring Data будет выяснить запрос, что вам нужно от имени.

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

Итак, у вас есть другой интерфейс репозитория для каждого объекта. Хранилище для объекта учетной записи, где вы хотите сделать основной CRUD, но также есть специальный запрос, который вы хотите выполнить могут выглядеть

// crud methods for Account entity, where Account's PK is 
// an artificial key of type Long 
public interface AccountRepository extends CrudRepository<Account, Long> { 
    @Query("select a from Account as a " 
    + "where a.flag = true " 
    + "and a.customer = :customer") 
    List<Account> findAccountsWithFlagSetByCustomer(
     @Param("customer") Customer customer); 
} 

и вы сделали, не требуется класс реализации. (Большая часть работы заключается в написании запросов и размещении правильных аннотаций на постоянных объектах. И вы должны подключить репозитории к своей конфигурации пружины.)

Смежные вопросы