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

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

1. Вступление

Среда Spring Data Key Value позволяет легко писать приложения Spring, которые используют хранилища значений ключей.

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

В этом руководствеwe’ll cover how we can use Spring Data Key Value with the default java.util.Map based implementation.

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

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

3. Maven Dependency

Для работы с Spring Data Key Value нам нужно добавить следующую зависимость:


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

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

4. Создание сущности

Давайте создадим объект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. Эта концепция очень похожа на коллекции в MongoDB и Elasticsearch, ядра в Solr и таблицы в JPA.

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

5. вместилище

Подобно другим фреймворкам Spring Data, мы будем использоватьneed to activate Spring Data repositories using the @EnableMapRepositories annotation.

По умолчанию репозитории будут использовать реализацию на основе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 {
}

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

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

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

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

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

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

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

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

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

Optional savedEmployee = employeeRepository.findById(1);

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

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

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

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

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

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

employeeRepository.deleteById(1);

6.5. Выбрать все объекты

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

Iterable employees = employeeRepository.findAll();

7. KeyValueTemplateс

Другой способ выполнения операций со структурой данных - использование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 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 employees = keyValueTemplate
  .findAll(Employee.class);

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

В дополнение к базовому функционалуthe template also supports KeyValueQuery for writing custom queries.

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

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

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

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

Существует больше фреймворков Spring Data, таких как Spring Data Redis, которые написаны поверх Spring Key Key Value. Обратитесь кthis article для ознакомления с Spring Data Redis.

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