Springデータキー値の手引き
データ]
1.はじめに
Spring Data Key-Valueフレームワークにより、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 Data Key Valueを操作するには、次の依存関係を追加する必要があります。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-keyvalue</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.data%22%20AND%20a%3A%22spring-data-keyvalue%22にあります。[ここに]。
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フレームワークと同様に、
@ EnableMapRepositories
アノテーションを使ってSpring Dataリポジトリをアクティブ化する必要があります。
デフォルトでは、リポジトリは
__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.リポジトリの利用
EmployeeRepository
で
CrudRepository
を拡張することで、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.
KeyValueTemplate
データ構造に対して操作を実行するもう1つの方法は、
KeyValueTemplate
を使用することです。
非常に基本的には、
KeyValueTemplate
は、
java.util.Map
実装をラップする
MapAdapter
を使用して、クエリとソートを実行します。
@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. 既存のオブジェクトを取得する
templateを使って構造体からオブジェクトを取得することでオブジェクトの挿入を検証できます。
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
もサポートしています。
たとえば、クエリを使用して、給与に基づいて
Employees
のソート済みリストを取得できます。
KeyValueQuery<Employee> query = new KeyValueQuery<Employee>();
query.setSort(new Sort(Sort.Direction.DESC, "salary"));
Iterable<Employee> employees
= keyValueTemplate.find(query, Employee.class);
9.まとめ
この記事では、
Repository
または
KeyValueTemplate
を使用したデフォルトのMap実装でSpring Data KeyValueフレームワークを使用する方法を紹介しました。
Spring Data RedisのようなSpring Data Frameworkには、Spring Data Key Valueの上に書かれているものがあります。 Spring Data Redisの概要については、
この記事
を参照してください。
そして、いつものように、ここに示されているすべてのコードサンプルはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-keyvalue[GitHubで利用可能]です。