Suporte do Vavr nos dados do Spring
*1. Visão geral *
Neste tutorial rápido, veremos o suporte para Vavr em Spring Data –, que foi adicionado no instantâneo de construção 2.0.0 Spring.
Mais especificamente, mostraremos um exemplo do uso das coleções Vavr Option e Vavr como tipos de retorno de um repositório Spring Data JPA.
===* 2. Dependências do Maven *
Primeiro, vamos configurar um projeto Spring Boot, pois torna a configuração de Spring Data muito mais rápida, adicionando a dependência spring-boot-parent ao pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/>
</parent>
Evidentemente, também precisamos da dependência vavr, bem como de algumas outras dependências para Spring Data e teste:
<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>
As versões mais recentes de https://search.maven.org/classic/search%7Cga%7C1%7Ca%3A%22vavr%22%20AND%20g%3A%22io.vavr%22[vavr], spring-boot-starter-data-jpa, https://search.maven. org/classic/ search% 7Cga% 7C1% 7Ca% 3A% 22spring-boot-starter-test% 22% 20AND% 20g% 3A% 22org.springframework.boot% 22 [spring-boot-starter-test] e h2 pode ser baixado do Maven Central.
Neste exemplo, estamos usando apenas o Spring Boot porque ele fornece a configuração automática de Spring Data. Se você estiver trabalhando em um projeto que não seja Boot, poderá adicionar a dependência spring-data-commons com o suporte Vavr diretamente:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
===* 3. Spring Data JPA Repositório com Vavr *
Spring Data agora contém suporte para definir métodos de consulta de repositório usando Vavr‘s Option e Vavr coleções: Seq, Set e Map como tipos de retorno.
Primeiro, vamos criar uma classe de entidade simples para manipular:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
//standard constructor, getters, setters
}
Em seguida, vamos criar o repositório JPA implementando a interface Repository e definindo dois métodos de consulta:
public interface VavrUserRepository extends Repository<User, Long> {
Option<User> findById(long id);
Seq<User> findByName(String name);
User save(User user);
}
Aqui, usamos Vavr Option para um método que retorna zero ou um resultado, e Vavr Seq para um método de consulta que retorna vários registros de User.
Também precisamos de uma classe principal Spring Boot para configurar automaticamente Spring Data e inicializar nosso aplicativo:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Como adicionamos a dependência h2, o Spring Boot configura automaticamente um DataSource usando um banco de dados H2 na memória.
===* 4. Testando o repositório JPA *
Vamos adicionar um teste JUnit para verificar nossos métodos de repositório:
@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());
}
}
No teste acima, primeiro adicionamos dois registros de usuário ao banco de dados e depois chamamos os métodos de consulta do repositório. Como você pode ver, os métodos retornam os objetos Vavr corretos.
===* 5. Conclusão*
Neste exemplo rápido, mostramos como podemos definir um repositório Spring Data usando Vavr types.
Como sempre, o código fonte completo pode ser encontrado em over no GitHub.