Populadores de repositório JPA de dados da primavera

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.