1. Обзор
В этом кратком руководстве мы рассмотрим поддержку Vavr
в Spring Data
, которая была добавлена в моментальный снимок сборки 2.0.0
Spring.
В частности, мы собираемся показать пример использования Vavr
Option
и коллекций Vavr
в качестве возвращаемых типов репозитория Spring Data JPA .
2. Зависимости Maven
Во-первых, давайте настроим проект Spring Boot
, так как он значительно ускоряет настройку данных Spring
, добавив зависимость spring-boot-parent
в pom.xml
:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.1</version>
<relativePath />
</parent>
Очевидно, нам также нужна зависимость vavr
, а также несколько других зависимостей для Spring Data
и тестирования:
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
Последние версии vavr , spring-boot-starter-data-jpa , spring-boot-starter-test и h2 можно загрузить с Maven Central.
В этом примере мы используем только Spring Boot
, поскольку он обеспечивает автоматическую настройку данных Spring .
Если вы работаете в проекте, отличном от Boot
, вы можете напрямую добавить зависимость spring-data-commons
с поддержкой Vavr
:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
3. Репозиторий Spring Data JPA
с Vavr
Spring Data
теперь содержит поддержку для определения методов запроса репозитория с использованием коллекций Vavr
Option
и Vavr
: Seq
, Set
и Map
в качестве возвращаемых типов.
Во-первых, давайте создадим простой класс сущности для управления:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
// standard constructor, getters, setters
}
Далее давайте создадим репозиторий JPA
, реализовав интерфейс репозитория
и определив два метода запроса:
public interface VavrUserRepository extends Repository<User, Long> {
Option<User> findById(long id);
Seq<User> findByName(String name);
User save(User user);
}
Здесь мы использовали Vavr
Option
для метода, возвращающего ноль или один результат, и Vavr
Seq
для метода запроса, который возвращает несколько пользовательских
записей.
Нам также нужен основной класс 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() {
Option<User> user = userRepository.findById(1L);
assertFalse(user.isEmpty());
assertTrue(user.get().getName().equals("John"));
Seq<User> users = userRepository.findByName("John");
assertEquals(2, users.size());
}
}
В приведенном выше тесте мы сначала добавляем две пользовательские записи в базу данных, а затем вызываем методы запроса репозитория. Как видите, методы возвращают правильные объекты Vavr
.
5. Вывод
В этом кратком примере мы показали, как мы можем определить репозиторий Spring Data , используя типы
Vavr
.
Как всегда, полный исходный код можно найти на GitHub .