此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Cassandra 4.4.0spring-doc.cadn.net.cn

Cassandra 存储库

要访问存储在 Apache Cassandra 中的域实体,您可以使用 Spring Data 的复杂存储库支持,这大大简化了 DAO 的实施。 为此,请为您的仓库创建一个接口,如下例所示:spring-doc.cadn.net.cn

示例 1.示例 Person 实体
@Table
public class Person {

  @Id
  private String id;
  private String firstname;
  private String lastname;

  // … getters and setters omitted
}

请注意,该实体具有一个名为id的类型String. 中使用的默认转换机制MappingCassandraConverter(支持存储库支持)将名为id作为行 ID。spring-doc.cadn.net.cn

以下示例显示了要保留的存储库定义Person实体:spring-doc.cadn.net.cn

要持久化的基本存储库接口Person实体
interface PersonRepository extends CrudRepository<Person, String> {

  // additional custom finder methods go here
}

现在,前面示例中的接口仅用于键入目的,但我们稍后会向其添加其他方法。spring-doc.cadn.net.cn

接下来,在 Spring 配置中,添加以下内容(如果使用 Java 进行配置):spring-doc.cadn.net.cn

如果要使用 Java 配置,请使用@EnableCassandraRepositories各自@EnableReactiveCassandraRepositories注解。 注解带有与 namespace 元素相同的属性。 如果未配置基础包,则基础架构将扫描带注释的配置类的包。 以下示例显示了如何使用不同的配置方法:spring-doc.cadn.net.cn

存储库的配置
@Configuration
@EnableCassandraRepositories
class ApplicationConfig extends AbstractCassandraConfiguration {

  @Override
  protected String getKeyspaceName() {
    return "keyspace";
  }

  public String[] getEntityBasePackages() {
    return new String[] { "com.oreilly.springdata.cassandra" };
  }
}

cassandra:repositoriesnamespace 元素导致扫描基本软件包以查找扩展CrudRepository并为找到的每个 Spring bean 创建 Spring bean。 默认情况下,存储库与CassandraTemplate名为cassandraTemplate,因此您只需配置cassandra-template-ref明确地表示,如果您偏离了此约定。spring-doc.cadn.net.cn

因为我们的域存储库扩展了CrudRepository各自ReactiveCrudRepository,它为您提供基本的 CRUD作。 使用存储库实例是将存储库作为依赖项注入客户端的问题,以下示例通过自动装配PersonRepository:spring-doc.cadn.net.cn

对 Person 实体的基本访问权限
@ExtendWith(SpringExtension.class)
class PersonRepositoryTests {

    @Autowired PersonRepository repository;

    @Test
    void readsPersonTableCorrectly() {

      List<Person> persons = repository.findAll();
      assertThat(persons.isEmpty()).isFalse();
    }
}

Cassandra 存储库支持分页和排序,以便对实体进行分页和排序访问。 Cassandra 分页需要分页状态才能在页面中进行仅进导航。 一个Slice跟踪当前的分页状态,并允许创建Pageable以请求下一页。 以下示例说明如何设置对Person实体:spring-doc.cadn.net.cn

分页访问Person实体
@ExtendWith(SpringExtension.class)
class PersonRepositoryTests {

    @Autowired PersonRepository repository;

    @Test
    void readsPagesCorrectly() {

      Slice<Person> firstBatch = repository.findAll(CassandraPageRequest.first(10));

      assertThat(firstBatch).hasSize(10);

      Slice<Person> nextBatch = repository.findAll(firstBatch.nextPageable());

      // …
    }
}
Cassandra 存储库不扩展PagingAndSortingRepository,因为使用 limit/offset 的经典分页模式不适用于 Cassandra。

前面的示例使用 Spring 的单元测试支持创建一个应用程序上下文,该上下文在测试类中执行基于 Comments 的依赖项注入。 在测试用例(测试方法)中,我们使用存储库来查询数据存储。 我们调用请求所有Person实例。spring-doc.cadn.net.cn

反应式存储库

Spring Data 的存储库抽象是一个动态 API,主要由您和您的需求在您声明查询方法时定义。 反应式 Cassandra 存储库可以通过使用 RxJava 或 Project Reactor 包装器类型来实现,方法是从特定于库的存储库接口之一进行扩展:spring-doc.cadn.net.cn

Spring Data 在幕后转换反应式包装器类型,以便您可以坚持使用自己喜欢的组合库。spring-doc.cadn.net.cn


APP信息