Поддержка 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.