1. введение
Платформа Spring Data Key Value framework позволяет легко писать приложения Spring, использующие хранилища ключей-значений.
Это сводит к минимуму избыточные задачи и шаблонный код, необходимый для взаимодействия с магазином. Фреймворк хорошо работает для магазинов ключевых ценностей, таких как Redis и Riak.
В этом уроке мы рассмотрим, как использовать значение ключа Spring Data Key со значением по умолчанию java.util.Реализация на основе Map .
2. Требования
Двоичные файлы Spring Data Key Value 1.x требуют уровня JDK 6.0 или выше и Spring Framework 3.0.x или выше.
3. Зависимость Maven
Для работы со значением ключа Spring Data нам нужно добавить следующую зависимость:
org.springframework.data spring-data-keyvalue 2.0.6.RELEASE
Последнюю версию можно найти здесь .
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 определяет, в какой части структуры данных должна храниться сущность. Эта концепция очень похожа на коллекции в MongoDB и Elasticsearch, ядра в Solr и таблицы в JPA.
По умолчанию ключевое пространство сущности извлекается из ее типа.
5. Хранилище
Подобно другим фреймворкам Spring Data framework, нам нужно будет активировать репозитории Spring Data с помощью @EnableMapRepositories аннотации .
По умолчанию репозитории будут использовать реализацию на основе ConcurrentHashMap- :
@SpringBootApplication @EnableMapRepositories public class SpringDataKeyValueApplication { }
Можно изменить значение по умолчанию ConcurrentHashMap реализация и использование некоторых других реализация и использование некоторых других реализации:
@EnableMapRepositories(mapType = WeakHashMap.class)
Создание репозиториев со значением ключа Spring Data работает так же, как и с другими фреймворками Spring Data:
@Repository public interface EmployeeRepository extends CrudRepository{ }
Чтобы узнать больше о хранилищах данных Spring, мы можем ознакомиться с этой статьей .
6. Использование репозитория
Расширяя CrudRepository в EmployeeRepository , мы получаем полный набор методов персистентности, которые выполняют функциональность CRUD.
Теперь мы посмотрим, как мы можем использовать некоторые из доступных методов сохранения.
6.1. Сохранение объекта
Давайте сохраним новый объект Employee в хранилище данных с помощью репозитория:
Employee employee = new Employee(1, "Mike", "IT", "5000"); employeeRepository.save(employee);
6.2. Извлечение существующего объекта
Мы можем проверить правильность сохранения сотрудника в предыдущем разделе, выбрав его:
OptionalsavedEmployee = employeeRepository.findById(1);
6.3. Обновление существующего объекта
CrudRepository не предоставляет специального метода для обновления объекта.
Вместо этого мы можем использовать метод save() :
employee.setName("Jack"); employeeRepository.save(employee);
6.4. Удаление существующего объекта
Мы можем удалить вставленный объект с помощью репозитория:
employeeRepository.deleteById(1);
6.5. Извлечение Всех Объектов
Мы можем получить все сохраненные объекты:
Iterableemployees = employeeRepository.findAll();
7. Шаблон Ключевого значения
Другой способ выполнения операций над структурой данных-использование шаблона Key Value .
В самых простых терминах шаблон Key Value использует MapAdapter wrapping a java.util.Map реализация для выполнения запросов и сортировки:
@Bean public KeyValueOperations keyValueTemplate() { return new KeyValueTemplate(keyValueAdapter()); } @Bean public KeyValueAdapter keyValueAdapter() { return new MapKeyValueAdapter(WeakHashMap.class); }
Обратите внимание, что в случае, если мы использовали @EnableMapRepositories , нам не нужно указывать Шаблон Ключевого значения. Он будет создан самим фреймворком.
8. Использование Шаблона Ключевого Значения
Используя шаблон Key Value , мы можем выполнять те же операции, что и с репозиторием.
8.1. Сохранение объекта
Давайте посмотрим, как сохранить новый объект Employee в хранилище данных с помощью шаблона:
Employee employee = new Employee(1, "Mile", "IT", "5000"); keyValueTemplate.insert(employee);
8.2. Извлечение существующего объекта
Мы можем проверить вставку объекта, извлекая его из структуры с помощью шаблона:
OptionalsavedEmployee = keyValueTemplate .findById(id, Employee.class);
8.3. Обновление существующего объекта
В отличие от CrudRepository , шаблон предоставляет специальный метод для обновления объекта:
employee.setName("Jacek"); keyValueTemplate.update(employee);
8.4. Удаление существующего объекта
Мы можем удалить объект с помощью шаблона:
keyValueTemplate.delete(id, Employee.class);
8.5. Извлечение Всех Объектов
Мы можем извлечь все сохраненные объекты с помощью шаблона:
Iterableemployees = keyValueTemplate .findAll(Employee.class);
8.6. Сортировка объектов
В дополнение к базовому функционалу, шаблон также поддерживает Key Value Query для написания пользовательских запросов.
Например, мы можем использовать запрос для получения отсортированного списка Сотрудников на основе их зарплаты:
KeyValueQueryquery = new KeyValueQuery (); query.setSort(new Sort(Sort.Direction.DESC, "salary")); Iterable employees = keyValueTemplate.find(query, Employee.class);
9. Заключение
В этой статье показано, как мы можем использовать Spring Data KeyValue framework с реализацией карты по умолчанию с помощью Repository или KeyValueTemplate .
Есть еще фреймворки Spring Data, такие как Spring Data Redis, которые записываются поверх значения ключа Spring Data. См. эту статью для ознакомления с Spring Data Redis.
И, как всегда, все примеры кода, показанные здесь, доступны на GitHub .