1. Обзор
В этом кратком руководстве мы рассмотрим поддержку Vavr в Spring Data– , которая была добавлена в 2.0.0 Снимок весенней сборки.
Более конкретно, мы покажем пример использования Var Option и Var коллекций в качестве возвращаемых типов репозитория Spring Data JPA .
2. Зависимости Maven
Во-первых, давайте настроим проект Spring Boot , так как он значительно ускоряет настройку Spring Data , добавив зависимость spring-boot-parent в pom.xml :
org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE
Очевидно, нам также нужна зависимость var , а также несколько других зависимостей для Spring Data и тестирования:
io.vavr vavr 0.9.0 org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 org.springframework.boot spring-boot-starter-test
Последние версии valve , spring-boot-starter-data-jpa , spring-boot-starter-test и h2 можно загрузить с Maven Central.
В этом примере мы используем Spring Boot только потому, что он предоставляет Spring Data автоконфигурацию. Если вы работаете в проекте, отличном от Boot , вы можете добавить зависимость spring-data-commons с поддержкой Vavr напрямую:
org.springframework.data spring-data-commons 2.0.0.RELEASE
3. Хранилище Spring Data JPA С Различными
Spring Data теперь содержит поддержку определения методов запроса репозитория с использованием Var ‘s Option и Var коллекций: Seq , Set и Map в качестве возвращаемых типов.
Во-первых, давайте создадим простой класс сущностей для управления:
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String name; // standard constructor, getters, setters }
Далее, давайте создадим репозиторий JPA , реализовав интерфейс Repository и определив два метода запроса:
public interface VavrUserRepository extends Repository{ Option findById(long id); Seq findByName(String name); User save(User user); }
Здесь мы использовали Vavr |/Option для метода, возвращающего ноль или один результат, и Var | Seq для метода запроса, который возвращает несколько записей User .
Нам также нужен основной Spring Boot класс для автоматической настройки Spring Data и начальной загрузки нашего приложения:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Поскольку мы добавили зависимость h2 , Spring Boot автоматически настроит источник данных с использованием базы данных в памяти H2 .
4. Тестирование репозитория JPA
Давайте добавим тест JUnit для проверки наших методов репозитория:
@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class VavrRepositoryIntegrationTest { @Autowired private VavrUserRepository userRepository; @Before public void setup() { User user1 = new User(); user1.setName("John"); User user2 = new User(); user2.setName("John"); userRepository.save(user1); userRepository.save(user2); } @Test public void whenAddUsers_thenGetUsers() { Optionuser = userRepository.findById(1L); assertFalse(user.isEmpty()); assertTrue(user.get().getName().equals("John")); Seq users = userRepository.findByName("John"); assertEquals(2, users.size()); } }
В приведенном выше тесте мы сначала добавляем две записи пользователя в базу данных, а затем вызываем методы запроса репозитория. Как вы можете видеть, методы возвращают правильные объекты Var .
5. Заключение
В этом кратком примере мы показали, как мы можем определить репозиторий Spring Data , используя типы Var .
Как всегда, полный исходный код можно найти на GitHub .