- PVSM.RU - https://www.pvsm.ru -
Spring Data позволяет легче создавать Spring-управляемые приложения которые используют новые способы доступа к данным, например нереляционные базы данных, map-reduce фреймворки, cloud сервисы, а так же уже хорошо улучшенную поддердку реляционных баз данных.
В этой статье будет рассмотрен один из под-проектов Spring Data — JPA
Я бы ответил так — если вам нужно быстро в проекте создать Repository слой базируемый на JPA, предназначенный в основном для CRUD операций, и вы не хотите создавать абстрактные дао, интерфейсы их реализации, то Spring Data — JPA это хороший выбор.
Будем считать у вас уже есть maven проект с подключенным Spring, базой данных, настроенным EntityManager-ом.
1. Добавьте артефакт со Spring Data — JPA
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>1.0.2.RELEASE</version> </dependency>
2. В ваш applicationContext.xml нужно добавить путь где будут храниться ваши Repository интерфейсы
<jpa:repositories base-package="com.test.repository" />
3. Создать Entity и Repository интерфейс для него
package com.test.entity; ... @Entity public class Test { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; private boolean dummy; private int tries; ... } package com.test.repository; import org.springframework.data.repository.CrudRepository; import com.test.entity.Test; public interface TestRepository extends CrudRepository<Test, Long> {}
4. Теперь вы можете использовать созданный интерфейс в вашем приложении
public class TestServiceImpl extends TestService { @Autowired TestRepository testRepository; ... }
Наследовавшись от CrudRepository вы получили возможность вызывать такие методы как:
без необходимости реализовывать их имплементацию.
Рассмотрим на примере: вам нужно сделать запрос, который выберет все Test записи, у которых поле «dummy» установленно в false, и записи отсортированны по полю «tries» в порядке ABC.
Для решения такой задачи вы можете выбрать один из нескольких вариантов:
Вариант 1:
@Query("FROM Test where dummy = ?1 ORDER BY tries ASC") List<Product> findTests(boolean dummyVal);
, или вариант 2:
List<Test> findByDummyOrderByTriesAsc(boolean dummyVal);
Если с первым способом все предельно просто и это знакомый запрос, то второй способ заключается в том, чтобы составить имя метода, особым способом использую ключевые слова, такие как: «find», «order», имя переменных и тд. Разработчики Spring Data — JPA постарались учесть большинство возможных вариантов, которые могут вам понадобится.
Если вам нужно написать действительно сложный запрос для этого вы можете использовать Specification.
Пример в котором в зависимости от «retries» будут выбраны данные с разными значениями «dummy».
public final class TestSpecs { public static Specification<Test> checkRetries(final int retries) { return new Specification<Test>() { @Override public Predicate toPredicate(Root<Test> root, CriteriaQuery<?> query, CriteriaBuilder cb) { if (retries > 10) { return cb.equal(root.get("dummy"), false); } else { return cb.equal(root.get("dummy"), true); } } }; } }
Следующий пример покажет как можно использовать созданный Specification для фильтра всех данных.
Расширим ваш интерфейс при помощи JpaSpecificationExecutor
public interface TestRepository extends CrudRepository<Test, Long>, JpaSpecificationExecutor<Test> {}
и вызовем метод findAll передав ему созданную Specification
public class TestServiceImpl extends TestService { @Autowired TestRepository testRepository; public void doTest() { int retries = 5; List<Test> result = testRepository.findAll(Specifications.where(TestSpecs.checkRetries(retries)) ... } }
Основной сайт проекта со списком всех Spring Data подпроектов [1].
Сайт проекта Spring Data — JPA [2]
Техническая документация с примерами всех возможностей [3]
Автор: mais
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/3034
Ссылки в тексте:
[1] Основной сайт проекта со списком всех Spring Data подпроектов: http://www.springsource.org/spring-data
[2] Сайт проекта Spring Data — JPA: http://www.springsource.org/spring-data/jpa
[3] Техническая документация с примерами всех возможностей: http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/
Нажмите здесь для печати.