Spring Data JPAリポジトリポピュレーター

1. 前書き

この簡単な記事では、* Spring JPA Repository Populators *を簡単な例で調べます。 Spring Data JPAリポジトリポピュレーターは、_data.sql_スクリプトの優れた代替手段です。
Spring Data JPAリポジトリポピュレーターは、JSONおよびXMLファイル形式をサポートしています。 次のセクションでは、Spring Data JPAリポジトリポピュレーターの使用方法について説明します。

2. サンプルアプリケーション

まず最初に、_Fruit_エンティティクラスと、データベースに取り込む果物のインベントリがあるとします。
@Entity
public class Fruit {
    @Id
    private long id;
    private String name;
    private String color;

    // getters and setters
}
__JpaRepository __を拡張して、データベースから_Fruit_データを読み取ります。
@Repository
public interface FruitRepository extends JpaRepository<Fruit, Long> {
    // ...
}
次のセクションでは、JSON形式を使用して、最初のフルーツデータを保存および入力します。

3. JSONリポジトリポピュレーター

_Fruit_データを使用してJSONファイルを作成しましょう。 このファイルをsrc / main / resourcesに作成し、_fruit-data.jsonと呼びます。
[
    {
        "_class": "com.baeldung.entity.Fruit",
        "name": "apple",
        "color": "red",
        "id": 1
    },
    {
        "_class": "com.baeldung.entity.Fruit",
        "name": "guava",
        "color": "green",
        "id": 2
    }
]
*エンティティクラス名は、各JSONオブジェクトの__class_フィールドに指定する必要があります。*残りのキーは、_Fruit_エンティティの列にマップされます。
次に、_pom.xml_にhttps://search.maven.org/search?q=g:com.fasterxml.jackson.core%20a:jackson-databind[_jackson-databind_]依存関係を追加します。
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>
最後に、リポジトリポピュレーターBeanを追加する必要があります。 このリポジトリポピュレータBeanは、_fruit-data.json_ファイルからデータを読み取り、アプリケーションの起動時にデータベースにデータを入力します。
@Bean
public Jackson2RepositoryPopulatorFactoryBean getRespositoryPopulator() {
    Jackson2RepositoryPopulatorFactoryBean factory = new Jackson2RepositoryPopulatorFactoryBean();
    factory.setResources(new Resource[]{new ClassPathResource("fruit-data.json")});
    return factory;
}
構成を単体テストする準備がすべて整いました。
@Test
public void givenFruitJsonPopulatorThenShouldInsertRecordOnStart() {
    List<Fruit> fruits = fruitRepository.findAll();
    assertEquals("record count is not matching", 2, fruits.size());

    fruits.forEach(fruit -> {
        if (1 == fruit.getId()) {
            assertEquals("apple", fruit.getName());
            assertEquals("red", fruit.getColor());
        } else if (2 == fruit.getId()) {
            assertEquals("guava", fruit.getName());
            assertEquals("green", fruit.getColor());
        }
    });
}

4. XMLリポジトリポピュレーター

このセクションでは、リポジトリポピュレーターでXMLファイルを使用する方法について説明します。 最初に、必要な_Fruit_詳細を含むXMLファイルを作成します。
ここで、XMLファイルは単一の果​​物のデータを表します。
_apple-fruit-data.xml_:
<fruit>
    <id>1</id>
    <name>apple</name>
    <color>red</color>
</fruit>
guava-fruit-data.xml:
<fruit>
    <id>2</id>
    <name>guava</name>
    <color>green</color>
</fruit>
繰り返しますが、これらのXMLファイルは_src / main / resources._に保存しています。
また、_pom.xml_に_https://search.maven.org/search?q = g:org.springframework%20a:spring-oxm [spring-oxm] _ maven依存関係を追加します。
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>
さらに、_ @ XmlRootElement_アノテーションをエンティティクラスに追加する必要があります。
@XmlRootElement
@Entity
public class Fruit {
    // ...
}
最後に、リポジトリポピュレーターBeanを定義します。 このBeanはXMLファイルを読み取り、データを取り込みます。
@Bean
public UnmarshallerRepositoryPopulatorFactoryBean repositoryPopulator() {
    Jaxb2Marshaller unmarshaller = new Jaxb2Marshaller();
    unmarshaller.setClassesToBeBound(Fruit.class);

    UnmarshallerRepositoryPopulatorFactoryBean factory = new UnmarshallerRepositoryPopulatorFactoryBean();
    factory.setUnmarshaller(unmarshaller);
    factory.setResources(new Resource[] { new ClassPathResource("apple-fruit-data.xml"),
      new ClassPathResource("guava-fruit-data.xml") });
    return factory;
}
JSONポピュレーターと同様に、XMLリポジトリポピュレーターを単体テストできます。

4. 結論

このチュートリアルでは、* Spring Data JPAリポジトリポピュレーター*の使用方法を学びました。 このチュートリアルで使用する完全なソースコードは、https://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-jpa-2 [GitHub上]で入手できます。