Um guia para o valor da chave de dados do Spring

Um guia para o valor da chave de dados do Spring

1. Introdução

A estrutura do Spring Data Key Value facilita a gravação de aplicativos Spring que usam armazenamentos de valores-chave.

Minimiza tarefas redundantes e o código padrão necessário para interagir com a loja. A estrutura funciona bem para lojas de valores-chave como Redis e Riak.

Neste tutorial,we’ll cover how we can use Spring Data Key Value with the default java.util.Map based implementation.

2. Exigências

Os binários do Spring Data Key Value 1.x requerem o JDK nível 6.0 ou superior e o Spring Framework 3.0.x ou superior.

3. Dependência do Maven

Para trabalhar com o Spring Data Key Value, precisamos adicionar a seguinte dependência:


    org.springframework.data
    spring-data-keyvalue
    2.0.6.RELEASE

A versão mais recente pode ser encontradahere.

4. Criando uma entidade

Vamos criar uma entidadeEmployee:

@KeySpace("employees")
public class Employee {

    @Id
    private Integer id;

    private String name;

    private String department;

    private String salary;

    // constructors/ standard getters and setters

}

Keyspaces define in which part of the data structure the entity should be kept. Este conceito é muito semelhante a coleções em MongoDB e Elasticsearch, núcleos em Solr e tabelas em JPA.

Por padrão, o espaço de chave de uma entidade é extraído de seu tipo.

5. Repositório

Semelhante a outros frameworks Spring Data, iremosneed to activate Spring Data repositories using the @EnableMapRepositories annotation.

Por padrão, os repositórios usarão a implementação baseada emConcurrentHashMap-:

@SpringBootApplication
@EnableMapRepositories
public class SpringDataKeyValueApplication {
}

É possível alterar a implementação padrão deConcurrentHashMap e usar algumas outras implementações dejava.util.Map:

@EnableMapRepositories(mapType = WeakHashMap.class)

A criação de repositórios com o Spring Data Key Value funciona da mesma maneira que com outras estruturas do Spring Data:

@Repository
public interface EmployeeRepository
  extends CrudRepository {
}

Para aprender mais sobre os repositórios Spring Data, podemos dar uma olhada emthis article.

6. Usando o Repositório

EstendendoCrudRepository emEmployeeRepository, obtemos um conjunto completo de métodos de persistência que executam a funcionalidade CRUD.

Agora, veremos como podemos usar alguns dos métodos de persistência disponíveis.

6.1. Salvando um Objeto

Vamos salvar um novo objetoEmployee no armazenamento de dados usando o repositório:

Employee employee = new Employee(1, "Mike", "IT", "5000");
employeeRepository.save(employee);

6.2. Recuperando um Objeto Existente

Podemos verificar o salvamento correto do funcionário na seção anterior, buscando o funcionário:

Optional savedEmployee = employeeRepository.findById(1);

6.3. Atualizando um objeto existente

CrudRepository não fornece um método dedicado para atualizar um objeto.

Em vez disso, podemos usar o métodosave():

employee.setName("Jack");
employeeRepository.save(employee);

6.4. Excluindo um objeto existente

Podemos excluir o objeto inserido usando o repositório:

employeeRepository.deleteById(1);

6.5. Buscar todos os objetos

Podemos buscar todos os objetos salvos:

Iterable employees = employeeRepository.findAll();

7. KeyValueTemplate

Outra maneira de realizar operações na estrutura de dados é usandoKeyValueTemplate.

Em termos muito básicos, oKeyValueTemplate usa umMapAdapter envolvendo uma implementaçãojava.util.Map para realizar consultas e classificação:

@Bean
public KeyValueOperations keyValueTemplate() {
    return new KeyValueTemplate(keyValueAdapter());
}

@Bean
public KeyValueAdapter keyValueAdapter() {
    return new MapKeyValueAdapter(WeakHashMap.class);
}

Observe que no caso de termos usado@EnableMapRepositories, não precisamos especificar umKeyValueTemplate.. Ele será criado pelo próprio framework.

8. UsandoKeyValueTemplate

UsandoKeyValueTemplate, podemos realizar as mesmas operações que fizemos com o repositório.

8.1. Salvando um Objeto

Vamos ver como salvar um novo objetoEmployee no armazenamento de dados usando um modelo:

Employee employee = new Employee(1, "Mile", "IT", "5000");
keyValueTemplate.insert(employee);

8.2. Recuperando um Objeto Existente

Podemos verificar a inserção do objeto, buscando-o na estrutura usando o template:

Optional savedEmployee = keyValueTemplate
  .findById(id, Employee.class);

8.3. Atualizando um objeto existente

Ao contrário deCrudRepository, o modelo fornece um método dedicado para atualizar um objeto:

employee.setName("Jacek");
keyValueTemplate.update(employee);

8.4. Excluindo um objeto existente

Podemos excluir um objeto com um modelo:

keyValueTemplate.delete(id, Employee.class);

8.5. Buscar todos os objetos

Podemos buscar todos os objetos salvos usando um modelo:

Iterable employees = keyValueTemplate
  .findAll(Employee.class);

8.6. Classificando os objetos

Além da funcionalidade básica,the template also supports KeyValueQuery for writing custom queries.

Por exemplo, podemos usar uma consulta para obter uma lista classificada deEmployees com base em seu salário:

KeyValueQuery query = new KeyValueQuery();
query.setSort(new Sort(Sort.Direction.DESC, "salary"));
Iterable employees
  = keyValueTemplate.find(query, Employee.class);

9. Conclusão

Este artigo mostrou como podemos usar a estrutura Spring Data KeyValue com a implementação de mapa padrão usandoRepository ouKeyValueTemplate.

Existem mais estruturas do Spring Data, como o Spring Data Redis, escritas sobre o valor da chave de dados do Spring. Consultethis article para uma introdução ao Spring Data Redis.

E, como sempre, todos os exemplos de código mostrados aqui estão disponíveisover on GitHub.