Поддержка Vavr в Spring Data

Поддержка Vavr в Spring Data

1. обзор

В этом кратком руководстве мы рассмотрим поддержкуVavr вSpring Data –, которая была добавлена ​​в моментальный снимок сборки2.0.0 Spring.

Более конкретно, мы собираемся показать пример использования коллекцийVavrOption иVavr в качестве типов возврата репозиторияSpring Data JPA.

2. Maven Зависимости

Во-первых, давайте настроим проектSpring Boot, поскольку он значительно ускоряет настройкуSpring Data, добавляя зависимостьspring-boot-parent кpom.xml:


    org.springframework.boot
    spring-boot-starter-parent
    2.0.0.RELEASE
    

Очевидно, нам также нужна зависимостьvavr, а также несколько других зависимостей для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

Последние версииvavr,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 Репозиторий сVavr

Spring Data теперь поддерживает определение методов запроса к репозиторию с использованием коллекцийVavr иOption иVavr:Seq,Set иMap) s как возвращаемые типы.

Во-первых, давайте создадим простой класс сущности для управления:

@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);
}

Здесь мы использовалиVavrOption для метода, возвращающего ноль или один результат, иVavrSeq для метода запроса, который возвращает несколько записейUser .

Нам также нужен основной классSpring Boot для автоматической настройкиSpring Data и начальной загрузки нашего приложения:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Поскольку мы добавили зависимостьh2,Spring Boot будет автоматически настраиватьDataSource, используя базу данных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());
    }
}

В приведенном выше тесте мы сначала добавляем две пользовательские записи в базу данных, а затем вызываем методы запроса репозитория. Как видите, методы возвращают правильные объектыVavr.

5. Заключение

В этом быстром примере мы показали, как можно определить репозиторийSpring Data, используя типыVavr.

Как всегда, полный исходный код можно найтиover on GitHub.