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() { Listfruits = 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 .