Usando o CassandraTemplate a partir do Spring Data
1. Visão geral
Este é o segundo artigo da série de artigos do Spring Data Cassandra. Neste artigo, vamos nos concentrar principalmente emCassandraTemplatee consultas CQL na camada de acesso a dados. Você pode ler mais sobre Spring Data Cassandra emfirst article in the series.
Cassandra Query Language (CQL) é a linguagem de consulta para o banco de dados Cassandra eCqlTemplate é o modelo de acesso a dados de baixo nível no Spring Data Cassandra - ele expõe convenientemente operações relacionadas à manipulação de dados para executar instruções CQL.
CassandraTemplate baseia-se no baixo nívelCqlTemplate e fornece uma maneira simples de consultar objetos de domínio e mapear os objetos para uma estrutura de dados persistente no Cassandra.
Vamos começar com a configuração e, em seguida, mergulhar em exemplos de uso dos dois modelos.
2. Configuração deCassandraTemplate
CassandraTemplate está disponível no contexto do Spring porque nossa configuração principal do Cassandra Spring está estendendo AbstractCassandraConfiguration:
@Configuration
@EnableCassandraRepositories(basePackages = "org.example.spring.data.cassandra.repository")
public class CassandraConfig extends AbstractCassandraConfiguration { ... }
Podemos então fazer uma ligação simples no modelo - por seu tipo exato, CassandraTemplate, ou como a interface mais genéricaCassandraOperations:
@Autowired
private CassandraOperations cassandraTemplate;
3. Acesso a dados usandoCassandraTemplate
Vamos usar oCassandraTemplate definido acima em nosso módulo de camada de acesso a dados para trabalhar com dados persistentes.
3.1. Salvar um novo livro
Podemos salvar um novo livro em nossa livraria:
Book javaBook = new Book(
UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
ImmutableSet.of("Computer", "Software"));
cassandraTemplate.insert(javaBook);
Em seguida, podemos verificar a disponibilidade do livro inserido no banco de dados:
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);
Estamos usando umSelect QueryBuilder aqui, a ser mapeado paraselectOne() emcassandraTemplate. DiscutiremosQueryBuilder com mais profundidade na seção de consultas CQL.
3.2. Salvar vários livros
Podemos salvar vários livros em nossa livraria de uma só vez usando uma lista:
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. Atualizando um livro existente
Lat's começa inserindo um novo livro:
Book javaBook = new Book(
UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
ImmutableSet.of("Computer", "Software"));
cassandraTemplate.insert(javaBook);
Vamos buscar o livro:
Select select = QueryBuilder.select().from("book");
Book retrievedBook = cassandraTemplate.selectOne(select, Book.class);
Então, vamos adicionar algumas tags adicionais ao livro recuperado:
retrievedBook.setTags(ImmutableSet.of("Java", "Programming"));
cassandraTemplate.update(retrievedBook);
3.4. Excluindo um livro inserido
Vamos inserir um novo livro:
Book javaBook = new Book(
UUIDs.timeBased(), "Head First Java", "O'Reilly Media",
ImmutableSet.of("Computer", "Software"));
cassandraTemplate.insert(javaBook);
Em seguida, exclua o livro:
cassandraTemplate.delete(javaBook);
3.5. Excluindo todos os livros
Vamos agora inserir alguns novos livros:
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);
Em seguida, exclua todos os livros:
cassandraTemplate.deleteAll(Book.class);
4. Acesso a dados usando consultas CQL
Sempre é possível usar consultas CQL para manipulação de dados na camada de acesso a dados. O tratamento da consulta CQL é realizado pela classeCqlTemplate, permitindo-nos executar consultas personalizadas conforme necessário.
No entanto, como a classeCassandraTemplate é uma extensão deCqlTemplate, podemos usá-la diretamente para executar essas consultas.
Vejamos os diferentes métodos que podemos usar para manipular dados usando consultas CQL.
4.1. UsandoQueryBuilder
QueryBuilder pode ser usado para construir uma consulta para manipulação de dados no banco de dados. Quase todas as manipulações padrão podem ser criadas usando os blocos de construção prontos para o uso:
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);
Se você olhar atentamente para o fragmento de código, poderá notar que o métodoexecute() é usado em vez do tipo de operação relevante (inserir, excluir, etc.). Isso ocorre porque o tipo de consulta é definido pela saída doQueryBuilder.
4.2. UsandoPreparedStatements
Mesmo quePreparedStatements possa ser usado para qualquer caso, esse mecanismo é geralmente recomendado para inserções múltiplas para ingestão de alta velocidade.
UmPreparedStatement é preparado apenas uma vez, ajudando a garantir o alto desempenho:
UUID uuid = UUIDs.timeBased();
String insertPreparedCql =
"insert into book (isbn, title, publisher, tags) values (?, ?, ?, ?)";
List
4.3. Usando declarações CQL
Podemos usar diretamente instruções CQL para consultar dados da seguinte maneira:
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. Conclusão
Neste artigo, examinamos várias estratégias de manipulação de dados usando Spring Data Cassandra, incluindoCassandraTemplatee consultas CQL.
A implementação dos trechos de código e exemplos acima podem ser encontrados emmy GitHub project - este é um projeto baseado em Maven, portanto, deve ser fácil de importar e executar como está.