Populadores de repositório JPA de dados da primavera
1. Introdução
Neste artigo rápido, vamos explorarSpring JPA Repository Populators com um exemplo rápido. O populador de repositório Spring Data JPA é uma ótima alternativa para o scriptdata.sql.
O preenchedor de repositório Spring Data JPA suporta os formatos de arquivo JSON e XML. Nas seções a seguir, veremos como usar o populador de repositório Spring Data JPA.
2. Aplicação de amostra
Em primeiro lugar, digamos que temos uma classe de entidadeFruit e um estoque de frutas para preencher nosso banco de dados:
@Entity
public class Fruit {
@Id
private long id;
private String name;
private String color;
// getters and setters
}
Vamos estenderJpaRepository to ler dados deFruit do banco de dados:
@Repository
public interface FruitRepository extends JpaRepository {
// ...
}
Na seção a seguir, usaremos o formato JSON para armazenar e preencher os dados iniciais da fruta.
3. Populadores de Repositório JSON
Vamos criar um arquivo JSON com dadosFruit. Vamos criar esse arquivo emsrc/main/resourcese chamá-lo defruit-data.json:
[
{
"_class": "com.example.entity.Fruit",
"name": "apple",
"color": "red",
"id": 1
},
{
"_class": "com.example.entity.Fruit",
"name": "guava",
"color": "green",
"id": 2
}
]
The entity class name should be given in the _class field of each JSON object. As chaves restantes são mapeadas para colunas de nossa entidadeFruit.
Agora, vamos adicionar a dependênciajackson-databind empom.xml:
com.fasterxml.jackson.core
jackson-databind
2.9.8
Finalmente, teremos que adicionar um bean populator de repositório. Este bean populator de repositório lerá os dados do arquivofruit-data.json e os preencherá no banco de dados quando o aplicativo for iniciado:
@Bean
public Jackson2RepositoryPopulatorFactoryBean getRespositoryPopulator() {
Jackson2RepositoryPopulatorFactoryBean factory = new Jackson2RepositoryPopulatorFactoryBean();
factory.setResources(new Resource[]{new ClassPathResource("fruit-data.json")});
return factory;
}
Estamos prontos para testar a unidade de nossa configuração:
@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. Populadores de repositório XML
Nesta seção, veremos como usar arquivos XML com populadores de repositório. Em primeiro lugar, criaremos um arquivo XML com os detalhesFruit necessários.
Aqui, um arquivo XML representa os dados de uma única fruta.
apple-fruit-data.xml:
1
apple
red
guava-fruit-data.xml:
2
guava
green
Novamente, estamos armazenando esses arquivos XML emsrc/main/resources.
Além disso, adicionaremos a dependência de mavenspring-oxm empom.xml:
org.springframework
spring-oxm
5.1.5.RELEASE
Além disso, precisamos adicionar a anotação@XmlRootElement à nossa classe de entidade:
@XmlRootElement
@Entity
public class Fruit {
// ...
}
Por fim, definiremos um bean populator de repositório. Este bean irá ler o arquivo XML e preencher os dados:
@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;
}
Podemos testar em unidade o preenchedor de repositório XML da mesma maneira que podemos com o preenchedor JSON.
4. Conclusão
Neste tutorial, aprendemos como usarSpring Data JPA repository populator. O código-fonte completo usado para este tutorial está disponívelover on GitHub.