Ein Leitfaden zum Spring Data Key Value

Ein Leitfaden für den Wert des Federdatenschlüssels

1. Einführung

Das Spring Data Key Value-Framework erleichtert das Schreiben von Spring-Anwendungen, die Schlüsselwertspeicher verwenden.

Es minimiert redundante Aufgaben und Code, der für die Interaktion mit dem Geschäft erforderlich ist. Das Framework eignet sich gut für Key-Value-Stores wie Redis und Riak.

In diesem Tutorial werdenwe’ll cover how we can use Spring Data Key Value with the default java.util.Map based implementation.

2. Bedarf

Die Binärdateien für Spring Data Key Value 1.x erfordern JDK-Version 6.0 oder höher und Spring Framework 3.0.x oder höher.

3. Maven-Abhängigkeit

Um mit Spring Data Key Value zu arbeiten, müssen wir die folgende Abhängigkeit hinzufügen:


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

Die neueste Version finden Sie unterhere.

4. Eine Entität erstellen

Erstellen wir eineEmployee-Entität:

@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. Dieses Konzept ist Sammlungen in MongoDB und Elasticsearch, Kernen in Solr und Tabellen in JPA sehr ähnlich.

Standardmäßig wird der Schlüsselbereich einer Entität aus ihrem Typ extrahiert.

5. Repository

Ähnlich wie bei anderen Spring Data-Frameworks werden wirneed to activate Spring Data repositories using the @EnableMapRepositories annotation.

Standardmäßig verwenden die Repositorys die aufConcurrentHashMap-basierende Implementierung:

@SpringBootApplication
@EnableMapRepositories
public class SpringDataKeyValueApplication {
}

Es ist möglich, die Standardimplementierung vonConcurrentHashMapzu ändern und einige andere Implementierungen vonjava.util.Mapzu verwenden:

@EnableMapRepositories(mapType = WeakHashMap.class)

Das Erstellen von Repositorys mit Spring Data Key Value funktioniert genauso wie bei anderen Spring Data-Frameworks:

@Repository
public interface EmployeeRepository
  extends CrudRepository {
}

Weitere Informationen zu Spring Data-Repositorys finden Sie unterthis article.

6. Verwenden des Repository

Durch Erweitern vonCrudRepository inEmployeeRepository erhalten wir einen vollständigen Satz von Persistenzmethoden, die CRUD-Funktionen ausführen.

Jetzt werden wir sehen, wie wir einige der verfügbaren Persistenzmethoden verwenden können.

6.1. Objekt speichern

Speichern Sie ein neuesEmployee-Objekt mithilfe des Repositorys im Datenspeicher:

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

6.2. Vorhandenes Objekt abrufen

Wir können die korrekte Speicherung des Mitarbeiters im vorherigen Abschnitt überprüfen, indem wir den Mitarbeiter abrufen:

Optional savedEmployee = employeeRepository.findById(1);

6.3. Aktualisieren eines vorhandenen Objekts

CrudRepository bietet keine dedizierte Methode zum Aktualisieren eines Objekts.

Stattdessen können wir die Methodesave()verwenden:

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

6.4. Vorhandenes Objekt löschen

Wir können das eingefügte Objekt mit dem Repository löschen:

employeeRepository.deleteById(1);

6.5. Alle Objekte holen

Wir können alle gespeicherten Objekte abrufen:

Iterable employees = employeeRepository.findAll();

7. KeyValueTemplate

Eine andere Möglichkeit, Operationen an der Datenstruktur auszuführen, ist die Verwendung vonKeyValueTemplate.

In sehr einfachen Worten verwendetKeyValueTemplate einMapAdapter, das einejava.util.Map-Implementierung umschließt, um Abfragen und Sortierungen durchzuführen:

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

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

Beachten Sie, dass wir für den Fall, dass wir@EnableMapRepositories verwendet haben, keinKeyValueTemplate. angeben müssen. Es wird vom Framework selbst erstellt.

8. Verwenden vonKeyValueTemplate

MitKeyValueTemplate können wir dieselben Operationen ausführen wie mit dem Repository.

8.1. Objekt speichern

Sehen wir uns an, wie Sie ein neuesEmployee-Objekt mithilfe einer Vorlage im Datenspeicher speichern:

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

8.2. Vorhandenes Objekt abrufen

Wir können das Einfügen des Objekts überprüfen, indem wir es mit Hilfe der Vorlage aus der Struktur abrufen:

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

8.3. Aktualisieren eines vorhandenen Objekts

Im Gegensatz zuCrudRepository bietet die Vorlage eine dedizierte Methode zum Aktualisieren eines Objekts:

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

8.4. Vorhandenes Objekt löschen

Wir können ein Objekt mit einer Vorlage löschen:

keyValueTemplate.delete(id, Employee.class);

8.5. Alle Objekte holen

Wir können alle gespeicherten Objekte mit einer Vorlage abrufen:

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

8.6. Objekte sortieren

Zusätzlich zur Grundfunktionalität wirdthe template also supports KeyValueQuery for writing custom queries.

Zum Beispiel können wir eine Abfrage verwenden, um eine sortierte Liste vonEmployees basierend auf ihrem Gehalt zu erhalten:

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

9. Fazit

Dieser Artikel zeigte, wie wir das Spring Data KeyValue-Framework mit der Standard-Map-Implementierung unter Verwendung vonRepository oderKeyValueTemplate verwenden können.

Es gibt weitere Spring Data Frameworks wie Spring Data Redis, die auf Spring Data Key Value geschrieben sind. Eine Einführung in Spring Data Redis finden Sie unterthis article.

Und wie immer sind alle hier gezeigten Codebeispieleover on GitHub verfügbar.