Springデータキー値の手引き

Spring Data Key Valueのガイド

1. 前書き

Spring Data Key Valueフレームワークを使用すると、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. メーベン依存

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. リポジトリ

他のSpringDataフレームワークと同様に、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. リポジトリの使用

CrudRepositoryEmployeeRepositoryで拡張することにより、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を使用することです。

非常に基本的な用語では、KeyValueTemplatejava.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. 既存のオブジェクトの取得

テンプレートを使用して構造からオブジェクトを取得することで、オブジェクトの挿入を確認できます。

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. 結論

この記事では、RepositoryまたはKeyValueTemplateを使用したデフォルトのMap実装でSpring DataKeyValueフレームワークを使用する方法を紹介しました。

Spring Data Key Valueの上に記述されたSpring Data RedisのようなSpring Data Frameworkがさらにあります。 Spring Data Redisの概要については、this articleを参照してください。

そして、いつものように、ここに示されているすべてのコードサンプルは利用可能なover on GitHubです。