对于最新的稳定版本,请使用 Spring Data Cassandra 4.4.0! |
开始
Spring Data for Apache Cassandra 需要 Apache Cassandra 2.1 或更高版本以及 Datastax Java Driver 4.0 或更高版本。 快速设置和引导工作环境的一种简单方法是在 Spring Tools 中创建基于 Spring 的项目或使用 start.spring.io。
示例存储库
要了解该库的工作原理,您可以下载并尝试几个示例。
世界您好
首先,您需要设置一个正在运行的 Apache Cassandra 服务器。
有关如何启动 Apache Cassandra 的说明,请参阅 Apache Cassandra 快速入门指南。
安装后,启动 Cassandra 通常只需执行以下命令即可:。CASSANDRA_HOME/bin/cassandra -f
要在 STS 中创建 Spring 项目,请转到 File → New → Spring Template Project → Simple Spring Utility Project,并在出现提示时按 Yes。
然后输入项目和包名称,例如 .org.spring.data.cassandra.example
然后,您可以将以下依赖项声明添加到 pom.xml 文件的部分。dependencies
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>4.3.6</version>
</dependency>
</dependencies>
此外,还应将 pom.xml 文件中的 Spring 版本更改为如下:
<spring.version>6.1.15</spring.version>
如果使用里程碑版本而不是 GA 版本,则还需要将 Maven 的 Spring 里程碑存储库的位置添加到pom.xml文件中,以便它位于元素的同一级别,如下所示:<dependencies/>
<repositories>
<repository>
<id>spring-milestone</id>
<name>Spring Maven MILESTONE Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
存储库也可以在此处浏览。
您还可以在此处浏览所有 Spring 存储库。
现在,您可以创建一个简单的 Java 应用程序,用于存储域对象并从 Cassandra 读取域对象。
为此,请首先创建一个要持久化的简单域对象类,如下例所示:
package org.springframework.data.cassandra.example;
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;
@Table
public class Person {
@PrimaryKey private final String id;
private final String name;
private final int age;
public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
private String getName() {
return name;
}
private int getAge() {
return age;
}
@Override
public String toString() {
return String.format("{ @type = %1$s, id = %2$s, name = %3$s, age = %4$d }", getClass().getName(), getId(),
getName(), getAge());
}
}
接下来,创建要运行的主应用程序,如下例所示:
-
Imperative
-
Reactive
package org.springframework.data.cassandra.example;
import java.util.UUID;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.core.query.Criteria;
import org.springframework.data.cassandra.core.query.Query;
import com.datastax.oss.driver.api.core.CqlSession;
public class CassandraApplication {
private static final Log LOG = LogFactory.getLog(CassandraApplication.class);
private static Person newPerson(String name, int age) {
return new Person(UUID.randomUUID().toString(), name, age);
}
public static void main(String[] args) {
CqlSession cqlSession = CqlSession.builder().withKeyspace("mykeyspace").build();
CassandraOperations template = new CassandraTemplate(cqlSession);
Person jonDoe = template.insert(newPerson("Jon Doe", 40));
LOG.info(template.selectOne(Query.query(Criteria.where("id").is(jonDoe.getId())), Person.class).getId());
template.truncate(Person.class);
cqlSession.close();
}
}
package org.springframework.data.cassandra.example;
import reactor.core.publisher.Mono;
import java.util.UUID;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.cassandra.core.ReactiveCassandraOperations;
import org.springframework.data.cassandra.core.ReactiveCassandraTemplate;
import org.springframework.data.cassandra.core.cql.session.DefaultBridgedReactiveSession;
import org.springframework.data.cassandra.core.query.Criteria;
import org.springframework.data.cassandra.core.query.Query;
import com.datastax.oss.driver.api.core.CqlSession;
public class ReactiveCassandraApplication {
private static final Log LOG = LogFactory.getLog(ReactiveCassandraApplication.class);
private static Person newPerson(String name, int age) {
return new Person(UUID.randomUUID().toString(), name, age);
}
public static void main(String[] args) {
CqlSession cqlSession = CqlSession.builder().withKeyspace("mykeyspace").build();
ReactiveCassandraOperations template = new ReactiveCassandraTemplate(new DefaultBridgedReactiveSession(cqlSession));
Mono<Person> jonDoe = template.insert(newPerson("Jon Doe", 40));
jonDoe.flatMap(it -> template.selectOne(Query.query(Criteria.where("id").is(it.getId())), Person.class))
.doOnNext(it -> LOG.info(it.toString()))
.then(template.truncate(Person.class))
.block();
cqlSession.close();
}
}
即使在这个简单的示例中,也有一些值得注意的事情需要指出:
-
您可以使用
Cassandra 创建 CassandraTemplate
的实例(或用于反应式用途的ReactiveCassandraTemplate
)。CqlSession
-
您必须将 POJO 注释为 Cassandra 实体,并注释 . (可选)您可以覆盖这些映射名称以匹配您的 Cassandra 数据库表和列名称。
@Table
@PrimaryKey
-
您可以使用原始 CQL 或 Driver API 来构建查询。
QueryBuilder