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
для чтения данных Fruit
из базы данных:
@Repository
public interface FruitRepository extends JpaRepository<Fruit, Long> {
// ...
}
В следующем разделе мы будем использовать формат JSON для хранения и заполнения исходных данных фруктов.
3. Наполнители репозитория JSON
Давайте создадим файл JSON с данными Fruit .
Мы создадим этот файл в src/main/resources
и назовем его fruit-data.json
:
[
{
"_class": "com.foreach.entity.Fruit",
"name": "apple",
"color": "red",
"id": 1
},
{
"_class": "com.foreach.entity.Fruit",
"name": "guava",
"color": "green",
"id": 2
}
]
Имя класса сущности должно быть указано в поле _class
каждого объекта JSON. Остальные ключи сопоставляются со столбцами нашей сущности Fruit .
Теперь мы добавим зависимость jackson -databind
в pom.xml
:
<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-файлы с заполнителями репозитория. Во-первых, мы создадим XML-файл с необходимой информацией о Fruit
.
Здесь файл XML представляет данные одного фрукта.
яблоко-фрукты-data.xml
:
<fruit>
<id>1</id>
<name>apple</name>
<color>red</color>
</fruit>
гуава-фрукты-data.xml
:
<fruit>
<id>2</id>
<name>guava</name>
<color>green</color>
</fruit>
Опять же, мы храним эти файлы XML в src/main/resources
.
Кроме того, мы добавим зависимость maven spring-oxm
в pom.xml
:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
Кроме того, нам нужно добавить аннотацию @XmlRootElement
к нашему классу сущностей:
@XmlRootElement
@Entity
public class Fruit {
// ...
}
Наконец, мы определим 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;
}
Мы можем выполнить модульное тестирование модуля заполнения репозитория XML точно так же, как и с модулем заполнения JSON.
4. Вывод
В этом руководстве мы узнали, как использовать заполнитель репозитория Spring Data JPA . Полный исходный код, используемый для этого руководства, доступен на GitHub .