Spring DataでのVavrサポート

Spring DataでのVavrサポート

1. 概要

このクイックチュートリアルでは、2.0.0 Springビルドスナップショットで追加されたSpring Data –でのVavrのサポートを見ていきます。

具体的には、VavrOptionおよびVavrコレクションをSpring Data JPAリポジトリの戻り値の型として使用する例を示します。

2. Mavenの依存関係

まず、spring-boot-parent依存関係をpom.xmlに追加することで、Spring Dataの構成がはるかに高速になるため、Spring Bootプロジェクトをセットアップしましょう。


    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

vavrspring-boot-starter-data-jpaspring-boot-starter-test、およびh2の最新バージョンは、MavenCentralからダウンロードできます。

この例では、Spring Dataの自動構成を提供するため、Spring Bootのみを使用しています。 Boot以外のプロジェクトで作業している場合は、Vavrサポートを使用してspring-data-commons依存関係を直接追加できます。


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

3. Spring Data JPAVavrを持つリポジトリ

Spring Dataには、VavrOptionおよびVavrコレクション(SeqSet、およびMap)を使用したリポジトリクエリメソッドの定義のサポートが含まれるようになりました。 )sを戻り値の型として。

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

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

    Option findById(long id);

    Seq findByName(String name);

    User save(User user);
}

ここでは、0または1つの結果を返すメソッドにVavrOptionを使用し、複数のUserレコードを返すクエリメソッドにVavrSeqを使用しました。 。

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

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

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

5. 結論

この簡単な例では、Vavrタイプを使用してSpring Dataリポジトリーを定義する方法を示しました。

いつものように、完全なソースコードはover on GitHubで見つけることができます。