SpringデータからのCassandraTemplateの使用
データ]
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ベースです。プロジェクトなので、そのままインポートして実行するのは簡単なはずです。