Verwendung der CassandraTemplate von Spring Data

Verwenden der CassandraTemplate aus Spring Data

1. Überblick

Dies ist der zweite Artikel aus der Artikelserie Spring Data Cassandra. In diesem Artikel konzentrieren wir uns hauptsächlich aufCassandraTemplate und CQL-Abfragen in der Datenzugriffsschicht. Weitere Informationen zu Spring Data Cassandra finden Sie infirst article in the series.

Cassandra Query Language (CQL) ist die Abfragesprache für die Cassandra-Datenbank undCqlTemplate ist die Vorlage für den Datenzugriff auf niedriger Ebene in Spring Data Cassandra. Sie macht Datenmanipulationsoperationen bequem verfügbar, um CQL-Anweisungen auszuführen.

CassandraTemplate baut auf dem niedrigenCqlTemplate auf und bietet eine einfache Möglichkeit, Domänenobjekte abzufragen und die Objekte einer persistierten Datenstruktur in Cassandra zuzuordnen.

Beginnen wir mit der Konfiguration und gehen dann auf Beispiele für die Verwendung der beiden Vorlagen ein.

2. CassandraTemplate Konfiguration

CassandraTemplate ist im Spring-Kontext verfügbar, da unsere Hauptkonfiguration von Cassandra Spring AbstractCassandraConfiguration erweitert:

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

Wir können dann die Vorlage einfach verdrahten - entweder nach dem genauen Typ CassandraTemplate oder als allgemeinere SchnittstelleCassandraOperations:

@Autowired
private CassandraOperations cassandraTemplate;

3. Datenzugriff mitCassandraTemplate

Verwenden wir die oben in unserem Datenzugriffsschichtmodul definiertenCassandraTemplate, um mit persistenten Daten zu arbeiten.

3.1. Ein neues Buch speichern

Wir können ein neues Buch in unserer Buchhandlung speichern:

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

Dann können wir die Verfügbarkeit des eingefügten Buches in der Datenbank überprüfen:

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);

Wir verwenden hier einSelect QueryBuilder, um es aufselectOne() incassandraTemplate abzubilden. Wir werden dieQueryBuilder im Abschnitt über CQL-Abfragen ausführlicher behandeln.

3.2. Mehrere Bücher speichern

Wir können mehrere Bücher gleichzeitig in unserer Buchhandlung speichern, indem wir eine Liste verwenden:

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 bookList = new ArrayList();
bookList.add(javaBook);
bookList.add(dPatternBook);
cassandraTemplate.insert(bookList);

3.3. Aktualisieren eines vorhandenen Buches

Beginnen Sie mit dem Einfügen eines neuen Buches:

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

Holen wir uns das Buch:

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

Fügen wir dann dem abgerufenen Buch einige zusätzliche Tags hinzu:

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

3.4. Ein eingefügtes Buch löschen

Fügen wir ein neues Buch ein:

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

Dann löschen Sie das Buch:

cassandraTemplate.delete(javaBook);

3.5. Alle Bücher löschen

Fügen wir nun einige neue Bücher ein:

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);

Dann lösche alle Bücher:

cassandraTemplate.deleteAll(Book.class);

4. Datenzugriff über CQL-Abfragen

Es ist immer möglich, CQL-Abfragen zur Datenmanipulation in der Datenzugriffsebene zu verwenden. Die CQL-Abfrageübergabe wird von der KlasseCqlTemplatedurchgeführt, sodass wir nach Bedarf benutzerdefinierte Abfragen ausführen können.

Da die KlasseCassandraTemplate eine Erweiterung vonCqlTemplate ist, können wir sie direkt zum Ausführen dieser Abfragen verwenden.

Schauen wir uns die verschiedenen Methoden an, mit denen wir Daten mithilfe von CQL-Abfragen bearbeiten können.

4.1. Verwenden vonQueryBuilder

QueryBuilder kann verwendet werden, um eine Abfrage für die Datenmanipulation in der Datenbank zu erstellen. Fast alle Standardmanipulationen können mit den Standardbausteinen erstellt werden:

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);

Wenn Sie sich das Code-Snippet genau ansehen, stellen Sie möglicherweise fest, dass die Methodeexecute()anstelle des entsprechenden Operationstyps (Einfügen, Löschen usw.) verwendet wird. Dies liegt daran, dass der Abfragetyp durch die Ausgabe vonQueryBuilder. definiert wird

4.2. Verwenden vonPreparedStatements

ObwohlPreparedStatements in jedem Fall verwendet werden kann, wird dieser Mechanismus normalerweise für mehrere Einsätze zur schnellen Aufnahme empfohlen.

APreparedStatement wird nur einmal vorbereitet, um eine hohe Leistung zu gewährleisten:

UUID uuid = UUIDs.timeBased();
String insertPreparedCql =
  "insert into book (isbn, title, publisher, tags) values (?, ?, ?, ?)";
List singleBookArgsList = new ArrayList<>();
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. Verwenden von CQL-Anweisungen

Wir können CQL-Anweisungen direkt verwenden, um Daten wie folgt abzufragen:

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. Fazit

In diesem Artikel haben wir verschiedene Datenmanipulationsstrategien mit Spring Data Cassandra untersucht, einschließlichCassandraTemplate und CQL-Abfragen.

Die Implementierung der obigen Codefragmente und Beispiele finden Sie inmy GitHub project - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.