Рубрики
Без рубрики

Поддержка Var в весенних данных

Узнайте, как использовать Var в хранилищах данных Spring.

Автор оригинала: baeldung.

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() {
        Option user = 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 .