Guide de la valeur de clé de données de printemps

Un guide pour la valeur de clé de données de printemps

1. introduction

L'infrastructure Spring Data Key Value facilite l'écriture d'applications Spring utilisant des magasins de valeurs-clés.

Il minimise les tâches redondantes et le code standard requis pour interagir avec le magasin. Le cadre fonctionne bien pour les magasins à valeur ajoutée tels que Redis et Riak.

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

2. Exigences

Les fichiers binaires Spring Data Key 1.x requièrent un JDK de niveau 6.0 ou supérieur et de Spring Framework 3.0.x ou supérieur.

3. Dépendance Maven

Pour utiliser la valeur de clé de données de printemps, nous devons ajouter la dépendance suivante:


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

La dernière version peut être trouvéehere.

4. Créer une entité

Créons une entitéEmployee:

@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. Ce concept est très similaire aux collections dans MongoDB et Elasticsearch, aux cœurs dans Solr et aux tables dans JPA.

Par défaut, l'espace de clé d'une entité est extrait de son type.

5. Dépôt

Semblable à d'autres frameworks Spring Data, nous allonsneed to activate Spring Data repositories using the @EnableMapRepositories annotation.

Par défaut, les référentiels utiliseront l'implémentation basée surConcurrentHashMap-:

@SpringBootApplication
@EnableMapRepositories
public class SpringDataKeyValueApplication {
}

Il est possible de modifier l’implémentation par défaut deConcurrentHashMap et d’utiliser d’autres implémentations dejava.util.Map:

@EnableMapRepositories(mapType = WeakHashMap.class)

La création de référentiels avec la valeur de clé Spring Data fonctionne de la même manière qu'avec les autres frameworks Spring Data:

@Repository
public interface EmployeeRepository
  extends CrudRepository {
}

Pour en savoir plus sur les référentiels Spring Data, nous pouvons consulterthis article.

6. Utiliser le référentiel

En étendantCrudRepository dansEmployeeRepository, nous obtenons un ensemble complet de méthodes de persistance qui exécutent la fonctionnalité CRUD.

Nous allons maintenant voir comment nous pouvons utiliser certaines des méthodes de persistance disponibles.

6.1. Sauvegarder un objet

Sauvegardons un nouvel objetEmployee dans le magasin de données à l'aide du référentiel:

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

6.2. Récupérer un objet existant

Nous pouvons vérifier la sauvegarde correcte de l'employé dans la section précédente en récupérant l'employé:

Optional savedEmployee = employeeRepository.findById(1);

6.3. Mise à jour d'un objet existant

CrudRepository ne fournit pas de méthode dédiée pour mettre à jour un objet.

Au lieu de cela, nous pouvons utiliser la méthodesave():

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

6.4. Suppression d'un objet existant

Nous pouvons supprimer l'objet inséré en utilisant le référentiel:

employeeRepository.deleteById(1);

6.5. Récupérer tous les objets

Nous pouvons récupérer tous les objets sauvegardés:

Iterable employees = employeeRepository.findAll();

7. KeyValueTemplate

Une autre façon d'effectuer des opérations sur la structure de données consiste à utiliserKeyValueTemplate.

En termes très basiques, leKeyValueTemplate utilise unMapAdapter encapsulant une implémentation dejava.util.Map pour effectuer des requêtes et un tri:

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

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

Notez que dans le cas où nous avons utilisé@EnableMapRepositories, nous n'avons pas besoin de spécifier unKeyValueTemplate. Il sera créé par le framework lui-même.

8. Utilisation deKeyValueTemplate

En utilisantKeyValueTemplate, nous pouvons effectuer les mêmes opérations que nous l'avons fait avec le référentiel.

8.1. Sauvegarder un objet

Voyons comment enregistrer un nouvel objetEmployee dans le magasin de données à l'aide d'un modèle:

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

8.2. Récupérer un objet existant

Nous pouvons vérifier l'insertion de l'objet en le récupérant à partir de la structure à l'aide de template:

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

8.3. Mise à jour d'un objet existant

Contrairement àCrudRepository, le modèle fournit une méthode dédiée pour mettre à jour un objet:

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

8.4. Suppression d'un objet existant

Nous pouvons supprimer un objet avec un modèle:

keyValueTemplate.delete(id, Employee.class);

8.5. Récupérer tous les objets

Nous pouvons récupérer tous les objets enregistrés en utilisant un modèle:

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

8.6. Tri des objets

En plus de la fonctionnalité de base,the template also supports KeyValueQuery for writing custom queries.

Par exemple, nous pouvons utiliser une requête pour obtenir une liste triée deEmployees en fonction de leur salaire:

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

9. Conclusion

Cet article a montré comment nous pouvons utiliser le framework Spring Data KeyValue avec l'implémentation par défaut de Map en utilisantRepository ouKeyValueTemplate.

Il existe d'autres référentiels de données Spring, comme Spring Data Redis, qui sont écrits au-dessus de la valeur de clé de données Spring. Reportez-vous àthis article pour une introduction à Spring Data Redis.

Et, comme toujours, tous les exemples de code présentés ici sont disponiblesover on GitHub.