データ]

  • リンク:/tag/vavr/[Vavr]


1概要

このクイックチュートリアルでは、

2.0.0

Springビルドスナップショットで追加された

Spring Dataの

Vavr__のサポートについて見ていきます。

具体的には、

Spring Data JPA

リポジトリの戻り型として

Vavr


Option

および

Vavr

コレクションを使用する例を示します。


2 Mavenの依存関係

まず、

Spring-boot-parent

依存関係を

pom.xml

に追加することで、

Spring Data

の設定がはるかに速くなるため、

Spring Boot

プロジェクトを設定しましょう。

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

明らかに、私たちは

vavr

依存関係、および

Spring Data

とテストのための他のいくつかの依存関係も必要です。

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


vavr

、https://の最新バージョンsearch.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22spring-boot-starter-data-jpa%22[spring-boot-starter-data-jpa]、https://search.maven。 org/classic/#検索%7Cga%7C1%7Ca%3A%22spring-boot-starter-test%22%20AND%20g%3A%22org.springframework.boot%22[spring-boot-starter-test]およびhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22h2%22%20AND%20g%3A%22com.h2database%22[h2]はMaven Centralからダウンロードできます。

この例では、

Spring Data

自動設定を提供するため、

Spring Boot

のみを使用しています。

Boot

以外のプロジェクトで作業している場合は、

Vavr

サポートを使用して

spring-data-commons

依存関係を直接追加できます。

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


3

Vavr


を使用した

Spring Data JPA

リポジトリ


Spring Data

には、

Vavr

sの

Option

および

Vavr

コレクション(戻り値の型として

Seq



Set

、および

Map

)を使用してリポジトリクエリメソッドを定義するためのサポートが追加されました。

まず、操作する簡単なエンティティクラスを作成しましょう。

@Entity
public class User {

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

    private String name;

   //standard constructor, getters, setters
}

次に、

Repository

インターフェースを実装し、2つのクエリメソッドを定義して

JPA

リポジトリを作成しましょう。

public interface VavrUserRepository extends Repository<User, Long> {

    Option<User> findById(long id);

    Seq<User> findByName(String name);

    User save(User user);
}

ここでは、0個または1個の結果を返すメソッドに

Vavr


Option

を使用し、複数の

User

レコードを返すクエリメソッドに

Vavr


Seq

を使用しました。

また、

Spring Data

を自動設定してアプリケーションをブートストラップするためのメインの

Spring Boot

クラスも必要です。

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


h2

依存関係を追加したので、

Spring Boot

はインメモリ

H2

データベースを使用して

DataSource

を自動設定します。


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> user = userRepository.findById(1L);
        assertFalse(user.isEmpty());
        assertTrue(user.get().getName().equals("John"));

        Seq<User> users = userRepository.findByName("John");
        assertEquals(2, users.size());
    }
}

上記のテストでは、最初に2つのユーザーレコードをデータベースに追加してから、リポジトリのクエリメソッドを呼び出します。ご覧のとおり、メソッドは正しい

Vavr

オブジェクトを返します。


5結論

この簡単な例では、

Vavr

型を使用して

Spring Data

リポジトリを定義する方法を示しました。

いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/vavr[over on GitHub]にあります。