データ]


1概要

Cassandraクエリ言語(CQL)はCassandraデータベースのクエリ言語であり、

CqlTemplate

はSpring Data Cassandraの低レベルデータアクセステンプレートです。CQLステートメントを実行するためのデータ操作関連の操作を公開するのが便利です。


CassandraTemplate

は、低レベルの

CqlTemplate

の上に構築され、ドメインオブジェクトを照会し、そのオブジェクトをCassandraの永続データ構造にマッピングする簡単な方法を提供します。


2

CandandraTemplate

設定

私たちのメインのCassandra Spring設定はAbstractCassandraConfigurationを拡張しているので、

CassandraTemplate

はSpringコンテキストで利用可能です:

@Configuration
@EnableCassandraRepositories(basePackages = "org.baeldung.spring.data.cassandra.repository")
public class CassandraConfig extends AbstractCassandraConfiguration { ... }

その正確な型、CassandraTemplate、またはより一般的なインターフェース__CassandraOperationsのいずれかを使用して、テンプレートに単純な配線を作成できます。

@Autowired
private CassandraOperations cassandraTemplate;


3

CassandraTemplate


を使用したデータアクセス

永続的なデータを扱うために、上で定義した

CassandraTemplate

をデータアクセスレイヤモジュールで使用しましょう。


3.1. 新しい本を保存する

新しい本を私たちの書店に保存することができます。

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
cassandraTemplate.insert(javaBook);

それからデータベースに挿入された本の空室状況を確認することができます。

Select select = QueryBuilder.select().from("book")
  .where(QueryBuilder.eq("title", "Head First Java"))
  .and(QueryBuilder.eq("publisher", "O'Reilly Media"));
Book retrievedBook = cassandraTemplate.selectOne(select, Book.class);

ここでは、

cassandraTemplate



selectOne()

にマップするために、

Select QueryBuilder

を使用しています。 CQLクエリのセクションで

QueryBuilder

についてさらに詳しく説明します。


3.2. 複数の書籍を保存する

リストを使用して、一度に複数の本を私たちの書店に保存できます。

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
Book dPatternBook = new Book(
  UUIDs.timeBased(), "Head Design Patterns", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
List<Book> bookList = new ArrayList<Book>();
bookList.add(javaBook);
bookList.add(dPatternBook);
cassandraTemplate.insert(bookList);


3.3. 既存の本を更新する

Latは新しい本を挿入することから始めます。

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
cassandraTemplate.insert(javaBook);

本を取ってみよう:

Select select = QueryBuilder.select().from("book");
Book retrievedBook = cassandraTemplate.selectOne(select, Book.class);

retrievedBook.setTags(ImmutableSet.of("Java", "Programming"));
cassandraTemplate.update(retrievedBook);


3.4. 挿入された本を削除する

新しい本を挿入しましょう:

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
cassandraTemplate.insert(javaBook);

それから本を削除します。

cassandraTemplate.delete(javaBook);


3.5. すべての書籍を削除する

それでは、新しい本をいくつか挿入しましょう。

Book javaBook = new Book(
  UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
Book dPatternBook = new Book(
  UUIDs.timeBased(), "Head Design Patterns", "O'Reilly Media",
  ImmutableSet.of("Computer", "Software"));
cassandraTemplate.insert(javaBook);
cassandraTemplate.insert(dPatternBook);

それからすべての本を削除します。

cassandraTemplate.deleteAll(Book.class);


4 CQLクエリを使用したデータアクセス

データアクセスレイヤでのデータ操作にCQLクエリを使用することは常に可能です。 CQLクエリ処理は

CqlTemplate

クラスによって実行されるため、必要に応じてカスタムクエリを実行できます。

ただし、

CassandraTemplate

クラスは

CqlTemplate

の拡張なので、これらのクエリを実行するために直接使用できます。

CQLクエリを使用してデータを操作するために使用できるさまざまな方法を見てみましょう。


4.1.

QueryBuilder


を使用する


QueryBuilder

を使用して、データベース内のデータ操作用のクエリを作成できます。ほとんどすべての標準的な操作は、すぐに使える構成要素を使用して構築できます。

Insert insertQueryBuider = QueryBuilder.insertInto("book")
 .value("isbn", UUIDs.timeBased())
 .value("title", "Head First Java")
 .value("publisher", "OReilly Media")
 .value("tags", ImmutableSet.of("Software"));
cassandraTemplate.execute(insertQueryBuider);

コードスニペットをよく見ると、関連する操作タイプ(insert、deleteなど)の代わりに

execute()

メソッドが使用されていることに気付くでしょう。これは、クエリの種類が__QueryBuilderの出力によって定義されるためです。


4.2.

PreparedStatements


を使用する


PreparedStatements

はどのような場合にも使用できますが、このメカニズムは通常、高速取り込みのための複数の挿入に対して推奨されます。


PreparedStatement

は一度だけ作成され、高性能を保証するのに役立ちます。

UUID uuid = UUIDs.timeBased();
String insertPreparedCql =
  "insert into book (isbn, title, publisher, tags) values (?, ?, ?, ?)";
List<Object> singleBookArgsList = new ArrayList<>();
List<List<?>> bookList = new ArrayList<>();
singleBookArgsList.add(uuid);
singleBookArgsList.add("Head First Java");
singleBookArgsList.add("OReilly Media");
singleBookArgsList.add(ImmutableSet.of("Software"));
bookList.add(singleBookArgsList);
cassandraTemplate.ingest(insertPreparedCql, bookList);


4.3. CQLステートメントの使用

次のようにCQLステートメントを直接使用してデータを問い合わせることができます。

UUID uuid = UUIDs.timeBased();
String insertCql = "insert into book (isbn, title, publisher, tags)
  values (" + uuid + ", 'Head First Java', 'OReilly Media', {'Software'})";
cassandraTemplate.execute(insertCql);


5結論

この記事では、

CassandraTemplate

およびCQLクエリなど、Spring Data Cassandraを使用したさまざまなデータ操作方法について検討しました。

上記のコードスニペットと例の実装はhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-cassandra[my GitHub project]にあります。これはMavenベースです。プロジェクトなので、そのままインポートして実行するのは簡単なはずです。