Перейти к основному содержимому

Руководство по значению ключа данных Spring

· 4 мин. чтения

1. Введение

Инфраструктура Spring Data Key Value упрощает написание приложений Spring, использующих хранилища ключей и значений.

Это сводит к минимуму избыточные задачи и шаблонный код, необходимый для взаимодействия с магазином. Фреймворк хорошо работает для хранилищ ключей и значений, таких как Redis и Riak.

В этом руководстве мы рассмотрим, как мы можем использовать Spring Data Key Value с реализацией по умолчанию на основе java.util.Map .

2. Требования

Двоичные файлы Spring Data Key Value 1.x требуют JDK уровня 6.0 или выше и Spring Framework 3.0.x или выше.

3. Зависимость от Maven

Чтобы работать со значением ключа данных Spring, нам нужно добавить следующую зависимость:

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-keyvalue</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>

Последнюю версию можно найти здесь .

4. Создание объекта

Давайте создадим сущность Сотрудника :

@KeySpace("employees")
public class Employee {

@Id
private Integer id;

private String name;

private String department;

private String salary;

// constructors/ standard getters and setters

}

Пространства ключей определяют, в какой части структуры данных должен храниться объект. Эта концепция очень похожа на коллекции в MongoDB и Elasticsearch, ядра в Solr и таблицы в JPA.

По умолчанию ключевое пространство объекта извлекается из его типа.

5. Репозиторий

Как и в других фреймворках Spring Data, нам потребуется активировать репозитории Spring Data с помощью аннотации @EnableMapRepositories .

По умолчанию репозитории будут использовать реализацию на основе ConcurrentHashMap :

@SpringBootApplication
@EnableMapRepositories
public class SpringDataKeyValueApplication {
}

Можно изменить реализацию ConcurrentHashMap по умолчанию и использовать некоторые другие реализации java.util.Map :

@EnableMapRepositories(mapType = WeakHashMap.class)

Создание репозиториев с Spring Data Key Value работает так же, как и с другими платформами Spring Data:

@Repository
public interface EmployeeRepository
extends CrudRepository<Employee, Integer> {
}

Чтобы узнать больше о репозиториях Spring Data, мы можем взглянуть на эту статью .

6. Использование репозитория

Расширяя CrudRepository в EmployeeRepository , мы получаем полный набор методов сохраняемости, выполняющих функции CRUD.

Теперь мы увидим, как мы можем использовать некоторые из доступных методов сохраняемости.

6.1. Сохранение объекта

Сохраним новый объект Employee в хранилище данных с помощью репозитория:

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

6.2. Получение существующего объекта

Мы можем проверить правильность сохранения сотрудника в предыдущем разделе, выбрав сотрудника:

Optional<Employee> savedEmployee = employeeRepository.findById(1);

6.3. Обновление существующего объекта

CrudRepository не предоставляет специального метода для обновления объекта.

Вместо этого мы можем использовать метод save() :

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

6.4. Удаление существующего объекта

Мы можем удалить вставленный объект с помощью репозитория:

employeeRepository.deleteById(1);

6.5. Получить все объекты

Мы можем получить все сохраненные объекты:

Iterable<Employee> employees = employeeRepository.findAll();

7. Шаблон KeyValue

Другой способ выполнения операций со структурой данных — использование KeyValueTemplate .

Проще говоря , KeyValueTemplate использует MapAdapter , обертывающий реализацию java.util.Map , для выполнения запросов и сортировки:

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

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

Обратите внимание, что в случае, если мы использовали @EnableMapRepositories , нам не нужно указывать KeyValueTemplate. Он будет создан самим фреймворком.

8. Использование шаблона KeyValueTemplate

Используя KeyValueTemplate , мы можем выполнять те же операции, что и с репозиторием.

8.1. Сохранение объекта

Давайте посмотрим, как сохранить новый объект Employee в хранилище данных с помощью шаблона:

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

8.2. Получение существующего объекта

Мы можем проверить вставку объекта, извлекая его из структуры с помощью шаблона:

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

8.3. Обновление существующего объекта

В отличие от CrudRepository , шаблон предоставляет специальный метод для обновления объекта:

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

8.4. Удаление существующего объекта

Мы можем удалить объект с помощью шаблона:

keyValueTemplate.delete(id, Employee.class);

8.5. Получить все объекты

Мы можем получить все сохраненные объекты, используя шаблон:

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

8.6. Сортировка объектов

В дополнение к базовому функционалу шаблон также поддерживает KeyValueQuery для написания пользовательских запросов.

Например, мы можем использовать запрос для получения отсортированного списка сотрудников в зависимости от их зарплаты:

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

9. Заключение

В этой статье показано, как мы можем использовать структуру Spring Data KeyValue с реализацией карты по умолчанию с использованием Repository или KeyValueTemplate .

Есть больше Spring Data Frameworks, таких как Spring Data Redis, которые написаны поверх Spring Data Key Value. Обратитесь к этой статье для ознакомления с Spring Data Redis.

И, как всегда, все показанные здесь примеры кода доступны на GitHub .