Рубрики
Без рубрики

Популяции репозитория Spring Data JPA

Узнайте, как использовать популяции репозитория Spring JPA для загрузки данных из файлов JSON или XML для тестирования

Автор оригинала: baeldung.

1. введение

В этой краткой статье мы рассмотрим Популяции репозитория Spring JPA с кратким примером. Заполнитель репозитория 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 для чтения Фруктов данных из базы данных:

@Repository
public interface FruitRepository extends JpaRepository {
    // ...
}

В следующем разделе мы будем использовать формат JSON для хранения и заполнения исходных данных о фруктах.

3. Заполнители репозитория JSON

Давайте создадим файл JSON с данными Fruit . Мы создадим этот файл в 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
    }
]

Имя класса сущности должно быть указано в поле _class каждого объекта JSON. Остальные ключи сопоставляются со столбцами нашей Фруктовой сущности.

Теперь мы добавим зависимость jackson-databind в pom.xml :


    com.fasterxml.jackson.core
    jackson-databind
    2.9.8

Наконец, нам придется добавить компонент-заполнитель репозитория. Этот компонент-заполнитель репозитория будет считывать данные из файла 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 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-файлы с заполнением репозитория. Во-первых, мы создадим XML-файл с необходимыми данными Fruit .

Здесь XML-файл представляет данные одного плода.

apple-fruit-data.xml :


    1
    apple
    red

guava-fruit-data.xml :


    2
    guava
    green

Опять же, мы храним эти XML-файлы в src/main/resources .

Кроме того, мы добавим зависимость spring-oxm maven в pom.xml :


    org.springframework
    spring-oxm
    5.1.5.RELEASE

Кроме того, нам нужно добавить @XmlRootElement аннотацию к нашему классу сущностей:

@XmlRootElement
@Entity
public class Fruit {
    // ...
}

Наконец, мы определим компонент-заполнитель репозитория. Этот компонент прочитает 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;
}

Мы можем модульно протестировать заполнитель репозитория XML так же, как и с JSONpopulator.

4. Заключение

В этом уроке мы узнали, как использовать Spring Data JPA repository populator . Полный исходный код, используемый для этого руководства, доступен на GitHub .