Spring Data JPA - замечательный проект, который генерирует DAO для вас и многое другое! Вам нужно только создать интерфейс (без какой-либо реализации):
interface PaymentMethodsDao extends JpaRepository<PaymentMethods, Integer> {}
Этот интерфейс (через унаследованный JpaRepository
) автоматически выдаст вам:
PaymentMethod save(PaymentMethod entity);
Iterable<PaymentMethod> save(Iterable<? extends PaymentMethod> entities);
PaymentMethod findOne(Integer id);
boolean exists(Integer id);
Iterable<PaymentMethod> findAll();
long count();
void delete(Integer id);
void delete(PaymentMethod entity);
void delete(Iterable<? extends PaymentMethod> entities);
void deleteAll();
Iterable<PaymentMethod> findAll(Sort sort);
Page<PaymentMethod> findAll(Pageable pageable);
List<PaymentMethod> findAll();
List<PaymentMethod> findAll(Sort sort);
List<PaymentMethod> save(Iterable<? extends PaymentMethods> entities);
void flush();
PaymentMethod saveAndFlush(PaymentMethods entity);
void deleteInBatch(Iterable<PaymentMethods> entities);
Интерфейс строго типизирован (обобщен) и автоматически реализован для вас. Для каждой сущности все, что вам нужно сделать, - это создать интерфейс, расширяющий JpaRepository<T,Integer extends Serializable>
.
Но подождите, это еще не все! Предполагая, что ваши PaymentMethod
имеют name
и validSince
постоянные поля. Если вы добавите следующий метод в ваш интерфейс:
interface PaymentMethodsDao extends JpaRepository<PaymentMethods, Integer> {
Page<PaymentMethod> findByNameLikeAndValidSinceGreaterThan(
String name, Date validSince, Pageable page
);
}
фреймворк проанализирует имя метода:
findBy
( Имя как) And
( ValidSince больше чем)
создайте запрос JPA QL, примените разбивку на страницы и сортировку (Pageable page
) и запустите его для вас. Нет необходимости в реализации:
paymentMethodsDao.findByNameLikeAndValidSinceGreaterThan(
"abc%",
new Date(),
new PageRequest(0, 20, Sort.Direction.DESC, "name"
);
Результирующий запрос:
SELECT * //or COUNT, framework also returns the total number of records
FROM PaymentMethods
WHERE name LIKE "abc%"
AND validSince > ...
И с подкачкой.
Единственным недостатком является то, что проект довольно новый, и его довольно легко достичь (но он очень активно развивается).