集合支持
Couchbase 支持 Scopes and Collections。本节文档介绍如何在 Spring Data Couchbase 中使用它。
try-cb-spring 示例应用程序是一个使用 Spring Data Couchbase 中的 Scopes 和 Collections 的工作示例。
需求
-
Couchbase Server 7.0 或更高版本。
-
Spring Data Couchbase 4.3.1 或更高版本。
入门与配置
范围和集合规范
有几种机制用于指定作用域和集合,这些机制可以结合使用,或者一个机制可以覆盖另一个机制。首先,给出作用域和集合的一些定义。未指定的作用域表示使用默认作用域,同样,未指定的集合表示使用默认集合。只有三种作用域和集合的组合是有效的:(1) 默认作用域和默认集合;(2) 默认作用域和非默认集合;(3) 非默认作用域和非默认集合。不可能同时拥有非默认作用域和默认集合,因为非默认作用域不包含默认集合,也不能创建一个默认集合。
可以在配置中指定范围:
@Configuration
static class Config extends AbstractCouchbaseConfiguration {
// Usual Setup
@Override public String getConnectionString() { /* ... */ }
// optionally specify the scope in the Configuration
@Override
protected String getScopeName() {
return "myScope"; // or a variable etc.;
}
}
可以将 Scopes 和 Collections 作为注解指定在实体类和仓库上:
@Document
@Scope("travel")
@Collection("airport")
public class Airport {...
@Scope("travel")
@Collection("airport")
public interface AirportRepository extends CouchbaseRepository<Airport, String> ...
可以使用 inScope(scopeName) 和 inCollection(collectionName) 流式 API 在模板上指定作用域和集合:
List<Airport> airports = template.findByQuery(Airport.class).inScope("archived").all()
可以在扩展了 DynamicProxyable 的存储库上使用 withScope(scopeName) 和 withCollection(collectionName) API 指定 Scopes 和 Collections:
public interface AirportRepository extends CouchbaseRepository<Airport, String>, DynamicProxyable<AirportRepository>{...}
...
List<Airport> airports = airportRepository.withScope("archived").findByName(iata);
优先级顺序是:
-
模板流畅 API 的 inScope()/inCollection()
-
模板/仓库对象的 withScope()/withCollection()
-
仓库方法的注解
-
仓库接口的注解
-
实体对象的注解
-
配置的 getScope()