Prise en charge de Vavr dans les données de printemps

Les données]

  • lien:/tag/vavr/[Vavr]

1. Vue d’ensemble

Dans ce rapide tutoriel, nous allons examiner le support de Vavr dans Spring Data – qui a été ajouté dans l’instantané de génération Spring 2.0.0 .

Plus précisément, nous allons montrer un exemple d’utilisation des collections Vavr Option et Vavr en tant que types de retour d’un référentiel JPA Spring Data.

2. Dépendances Maven

Commençons par configurer un projet Spring Boot , car il accélère considérablement la configuration de Spring Data en ajoutant la dépendance spring-boot-parent à pom.xml :

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/>
</parent>

Evidemment, nous avons également besoin de la dépendance vavr , ainsi que de quelques autres dépendances pour Spring Data et testing:

<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>

Les dernières versions 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[printemps-boot-starter-test]et h2 peut être téléchargé à partir de Maven Central.

Dans cet exemple, nous n’utilisons que Spring Boot car il fournit la configuration automatique de Spring Data . Si vous travaillez dans un projet autre que Boot , vous pouvez ajouter directement la dépendance spring-data-commons avec Vavr support:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>

3. Spring Data JPA Repository avec Vavr

Spring Data prend désormais en charge la définition de méthodes de requête de référentiel à l’aide des collections Vavr Option et Vavr : Seq , Set et Map en tant que types de retour.

Commençons par créer une classe d’entités simple à manipuler:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;

   //standard constructor, getters, setters
}

Ensuite, créons le référentiel JPA en implémentant l’interface Repository et en définissant deux méthodes de requête:

public interface VavrUserRepository extends Repository<User, Long> {

    Option<User> findById(long id);

    Seq<User> findByName(String name);

    User save(User user);
}

Ici, nous avons utilisé Vavr Option pour une méthode renvoyant zéro ou un résultat et Vavr Seq pour une méthode de requête qui renvoie plusieurs enregistrements User .

Nous avons également besoin d’une classe principale Spring Boot pour configurer automatiquement Spring Data et amorcer notre application:

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

Puisque nous avons ajouté la dépendance h2 , Spring Boot configurera automatiquement un DataSource à l’aide d’une base de données H2 en mémoire.

4. Test du référentiel JPA

Ajoutons un test JUnit pour vérifier nos méthodes de référentiel:

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

Dans le test ci-dessus, nous ajoutons d’abord deux enregistrements d’utilisateur à la base de données, puis appelons les méthodes de requête du référentiel. Comme vous pouvez le constater, les méthodes retournent les objets Vavr corrects.

5. Conclusion

Dans cet exemple rapide, nous avons montré comment définir un référentiel Spring Data à l’aide de types Vavr .

Comme toujours, le code source complet est disponible sur over sur GitHub .