Vavr-Unterstützung in Spring Data

Vavr-Support in Spring-Daten

1. Überblick

In diesem kurzen Tutorial werden wir uns die Unterstützung fürVavr inSpring Data – ansehen, die im Spring Build-Snapshot von2.0.0hinzugefügt wurde.

Im Einzelnen zeigen wir ein Beispiel für die Verwendung vonVavrOption undVavr Sammlungen als Rückgabetypen einesSpring Data JPA Repositorys.

2. Maven-Abhängigkeiten

Lassen Sie uns zunächst einSpring Boot-Projekt einrichten, da dadurch die Konfiguration vonSpring Data viel schneller wird, indem diespring-boot-parent-Abhängigkeit zupom.xml hinzugefügt wird:


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

Offensichtlich benötigen wir auch die Abhängigkeit vonvavrowie einige andere Abhängigkeiten fürSpring Dataund das Testen:


    io.vavr
    vavr
    0.9.0


    org.springframework.boot
    spring-boot-starter-data-jpa


    com.h2database
    h2


    org.springframework.boot
    spring-boot-starter-test

Die neuesten Versionen vonvavr,spring-boot-starter-data-jpa,spring-boot-starter-test undh2 können von Maven Central heruntergeladen werden.

In diesem Beispiel verwenden wir nurSpring Boot, da es die automatische Konfiguration vonSpring Databietet. Wenn Sie in einem Nicht-Boot-Projekt arbeiten, können Sie diespring-data-commons-abhängigkeit mitVavr-Unterstützung direkt hinzufügen:


    org.springframework.data
    spring-data-commons
    2.0.0.RELEASE

3. Spring Data JPA Repository mitVavr

Spring Data enthält jetzt Unterstützung für das Definieren von Repository-Abfragemethoden unter Verwendung derOption- undVavr-Sammlungen vonVavr:Seq,Set undMap) s als Rückgabetypen.

Erstellen wir zunächst eine einfache zu manipulierende Entitätsklasse:

@Entity
public class User {

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

    private String name;

    // standard constructor, getters, setters
}

Als Nächstes erstellen wir dasJPA-Repository, indem wir dieRepository-Schnittstelle implementieren und zwei Abfragemethoden definieren:

public interface VavrUserRepository extends Repository {

    Option findById(long id);

    Seq findByName(String name);

    User save(User user);
}

Hier haben wirVavrOption für eine Methode verwendet, die null oder eins Ergebnisse zurückgibt, undVavrSeq für eine Abfragemethode, die mehrereUser Datensätze zurückgibt .

Wir benötigen auch eine HauptklasseSpring Boot, umSpring Data automatisch zu konfigurieren und unsere Anwendung zu booten:

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

Da wir die Abhängigkeit vonh2hinzugefügt haben, konfiguriertSpring BootDataSource automatisch mithilfe einer speicherinternenH2-Datenbank.

4. Testen desJPA-Repositorys

Fügen wir einen JUnit-Test hinzu, um unsere Repository-Methoden zu überprüfen:

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

Im obigen Test fügen wir der Datenbank zunächst zwei Benutzerdatensätze hinzu und rufen dann die Abfragemethoden des Repositorys auf. Wie Sie sehen können, geben die Methoden die richtigenVavr-Objekte zurück.

5. Fazit

In diesem kurzen Beispiel haben wir gezeigt, wie wir das Repository vonSpring Datamithilfe der Typen vonVavrdefinieren können.

Wie immer kann der vollständige Quellcodeover on GitHub gefunden werden.