附录 A:命名空间引用
元素<repositories />
该元素触发了 Spring 数据存储库基础结构的设置。最重要的属性是,它定义了要扫描 Spring 数据存储库接口的包。请参阅“XML 配置”。下表描述了元素的属性:<repositories />
base-package
<repositories />
表 11.属性
名字 | 描述 |
| 定义要扫描的包,以查找在自动检测模式下扩展的存储库接口(实际接口由特定的 Spring 数据模块确定)。还会扫描已配置软件包下的所有软件包。允许使用通配符。 |
| 定义用于自动检测自定义存储库实现的后缀。名称以配置的后缀结尾的类被视为候选类。默认为。 |
| 确定用于创建查找器查询的策略。有关详细信息,请参阅“查询查找策略”。默认为。 |
| 定义搜索包含外部定义查询的属性文件的位置。 |
| 是否应考虑嵌套存储库接口定义。默认为。 |
附录 B:填充器命名空间参考
<填充器 /> 元素
该元素允许通过 Spring 数据存储库基础架构填充数据存储。[1]<populator />
表 12.属性
名字 | 描述 |
| 应填充从存储库中查找要读取对象的文件的位置。 |
附录 C:存储库查询关键字
支持的查询方法主题关键字
下表列出了 Spring 数据存储库查询派生机制通常支持的主题关键字,以表达谓词。 有关支持的关键字的确切列表,请参阅特定于商店的文档,因为此处列出的某些关键字可能在特定商店中不受支持。
表 13.查询主题关键字
关键词 | 描述 |
| 常规查询方法通常返回存储库类型、主子类型或结果包装器(如),或任何其他特定于存储的结果包装器。可以用作,或与其他关键字结合使用。 |
| 存在投影,返回通常为结果。 |
| 计数投影返回数值结果。 |
| 删除查询方法不返回任何结果 () 或删除计数。 |
| 将查询结果限制为第一个结果。此关键字可以出现在主题(和其他关键字)之间的任何位置。 |
| 使用非重复查询仅返回唯一结果。请参阅特定于商店的文档是否支持该功能。此关键字可以出现在主题(和其他关键字)之间的任何位置。 |
支持的查询方法谓词关键字和修饰符
下表列出了 Spring 数据存储库查询派生机制通常支持的谓词关键字。 但是,请参阅特定于商店的文档,了解支持的关键字的确切列表,因为此处列出的某些关键字可能在特定商店中不受支持。
表 14.查询谓词关键字
逻辑关键字 | 关键字表达式 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
除了筛选器谓词之外,还支持以下修饰符列表:
表 15.查询谓词修饰符关键字
关键词 | 描述 |
| 与谓词关键字一起使用,用于不区分大小写的比较。 |
| 忽略所有合适属性的大小写。在查询方法谓词中的某处使用。 |
| 指定静态排序顺序,后跟属性路径和方向(例如)。 |
附录 D:存储库查询返回类型
支持的查询返回类型
下表列出了 Spring 数据存储库通常支持的返回类型。 但是,请参阅特定于商店的文档以获取支持的返回类型的确切列表,因为此处列出的某些类型可能在特定商店中不受支持。
地理空间类型(如、和)仅适用于支持地理空间查询的数据存储。 某些存储模块可能会定义自己的结果包装器类型。 |
表 16.查询返回类型
返回类型 | 描述 |
| 表示无返回值。 |
原 | Java 原语。 |
包装器类型 | Java 包装器类型。 |
| 一个独特的实体。期望查询方法最多返回一个结果。如果未找到结果,则返回。多个结果触发 an. |
| 一。 |
| 一个。 |
| 一个。 |
| 爪哇8或番石榴。期望查询方法最多返回一个结果。如果未找到结果,则返回 oris 。多个结果触发 an. |
| 要么是斯卡拉,要么是vavrtype。在语义上与前面描述的Java 8的行为相同。 |
| A Java 8 . |
| 该直接的便利扩展公开了流式传输,映射和过滤结果,连接它们等的方法。 |
实现和采用构造函数或工厂方法参数的类型 | 公开采用 aas 参数的构造函数或/工厂方法的类型。有关详细信息,请参阅返回自定义可流式传输包装器类型。 |
瓦夫尔,,, | Vavr 集合类型。有关详细信息,请参阅对 Vavr 集合的支持。 |
| A. 期望对方法进行注释,并且需要启用 Spring 的异步方法执行功能。 |
| A Java 8.期望对方法进行注释,并且需要启用 Spring 的异步方法执行功能。 |
| 一个大小的数据块,指示是否有更多可用数据。需要方法参数。 |
| A 包含其他信息,例如结果总数。需要方法参数。 |
| 包含附加信息(如到参考位置的距离)的结果条目。 |
| 包含附加信息的列表,例如到参考位置的平均距离。 |
| Awith,例如到参考位置的平均距离。 |
| 使用反应式存储库发射零个或一个元素的项目反应器。期望查询方法最多返回一个结果。如果未找到结果,则返回。多个结果触发 an. |
| 使用反应式存储库发射零个、一个或多个元素的项目反应器。返回的查询还可以发出无限数量的元素。 |
| 一个 RxJava使用反应式存储库发出单个元素。期望查询方法最多返回一个结果。如果未找到结果,则返回。多个结果触发 an. |
| 使用反应式存储库的 RxJavaemitting 零个或一个元素。期望查询方法最多返回一个结果。如果未找到结果,则返回。多个结果触发 an. |
| 使用反应式存储库的 RxJavaemitting 零个、一个或多个元素。返回的查询还可以发出无限数量的元素。 |
附录 E:迁移指南
从 Spring Data Cassandra 1.x 到 2.x 的迁移指南
Spring Data for Apache Cassandra 2.0 在从早期版本升级时引入了一组重大更改:
- 将模块合并为单个模块。
spring-cql
spring-data-cassandra
- 将异步和同步操作分离到专用接口和模板中。
CqlOperations
CassandraOperations
- 修改了 API 以保持一致。
CqlTemplate
JdbcTemplate
- 删除了该方法。
CassandraOperations.selectBySimpleIds
- 用了更好的名字。
CassandraRepository
- 删除了SD Cassandraandtypes,转而使用DataStaxandtypes。
ConsistencyLevel
RetryPolicy
ConsistencyLevel
RetryPolicy
- 重构了 CQL 规范以评估对象和配置器的价值。
- 重构为不可变对象。
QueryOptions
- 重构为单列。
CassandraPersistentProperty
弃用
- 弃用的赞成。
QueryOptionsBuilder.readTimeout(long, TimeUnit)
QueryOptionsBuilder.readTimeout(Duration)
- 弃用的赞成。
CustomConversions
CassandraCustomConversions
- 弃用的赞成。
BasicCassandraMappingContext
CassandraMappingContext
- 弃用的赞成。
o.s.d.c.core.cql.CachedPreparedStatementCreator
o.s.d.c.core.cql.support.CachedPreparedStatementCreator
- 弃用的赞成。
CqlTemplate.getSession()
getSessionFactory()
- 弃用和赞成的方法。
CqlIdentifier.cqlId(…)
KeyspaceIdentifier.ksId(…)
.of(…)
- 已弃用的构造函数有利于其构建器。
QueryOptions
- 弃用赞成
TypedIdCassandraRepository
CassandraRepository
合并的Spring CQL和Spring Data Cassandra模块
Spring CQL 和 Spring Data Cassandra 现在合并为一个模块。 独立模块不再可用。 您可以找到合并到的所有类型。 以下清单显示了如何在 maven 依赖项中包含:spring-cql
spring-data-cassandra
spring-data-cassandra
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
通过合并,我们将所有 CQL 包合并到 Spring Data Cassandra 中:
- 移动丁托。
o.s.d.cql
o.s.d.cassandra.core.cql
- 合并并扁平化了 XML 和 Java 子包。
o.s.d.cql
o.s.d.cassandra.config
- 搬家了。
CassandraExceptionTranslator
CqlExceptionTranslator
o.s.d.c.core.cql
- 移动了卡桑德拉例外。
o.s.d.c.support.exception
o.s.d.cassandra
- 移动到(影响转换器)。
o.s.d.c.convert
o.s.d.c.core.convert
- 移动到(影响映射注释)。
o.s.d.c.mapping
o.s.d.c.core.mapping
- 搬家了。
MapId
o.s.d.c.repository
o.s.d.c.core.mapping
修订CqlTemplate
/CassandraTemplate
我们分为三种方式:CqlTemplate
CassandraTemplate
-
CassandraTemplate
不再 abut 使用允许重用和精细控制提取大小、一致性级别和重试策略的实例。 你可以获得通过。 由于更改,依赖注入需要额外的 Bean 设置。CqlTemplate
CqlOperations
CassandraTemplate.getCqlOperations()
CqlTemplate
-
CqlTemplate
现在反映了基本的CQL操作,而不是混合高级和低级API调用(例如asversus),并且简化的方法集与Spring Frameworks的便捷回调接口保持一致。count(…)
execute(…)
JdbcTemplate
- 异步方法由 onand 重新实现。 我们删除了各种异步回调 listeners.is 一种灵活的方法,并允许过渡到一个。
AsyncCqlTemplate
AsyncCassandraTemplate
ListenableFuture
Cancellable
ListenableFuture
CompletableFuture
删除CassandraOperations.selectBySimpleIds()
该方法已删除,因为它不支持复杂 ID。 新引入的查询 DSL 允许单列 ID 的映射和复杂 id,如以下示例所示:
cassandraTemplate.select(Query.query(Criteria.where("id").in(…)), Person.class)
更好的名称CassandraRepository
我们重命名了 Spring,以使 Spring Data Cassandra 命名与其他 Spring Data 模块保持一致:CassandraRepository
TypedIdCassandraRepository
- 重命名为
CassandraRepository
MapIdCassandraRepository
- 重命名为
TypedIdCassandraRepository
CassandraRepository
- 引入,扩展为已弃用的类型以简化迁移
TypedIdCassandraRepository
CassandraRepository
删除了SD Cassandraandtypes,转而使用DataStaxandtypesConsistencyLevel
RetryPolicy
ConsistencyLevel
RetryPolicy
Spring Data Cassandraand已被移除。 请使用 DataStax 驱动程序提供的类型。ConsistencyLevel
RetryPolicy
Spring Data Cassandra 类型限制了 Cassandra 本机驱动程序中提供和允许的可用功能的使用。 因此,Spring Data Cassandra 的类型每次驱动程序引入更新功能时都需要更新。
重构 CQL 规范以评估对象和配置器
CQL 规范类型现在尽可能是值类型(例如,),对象由静态工厂方法构造。 这允许简单值对象的不可变性。 对必需属性(如表名或键空间名)进行操作的配置器对象(例如)最初是通过静态工厂方法构造的,并允许进一步配置,直到创建所需的状态。FieldSpecification
AlterColumnSpecification
AlterTableSpecification
重构为不可变对象QueryOptions
QueryOptions
并且现在是不可变的,可以通过构建器创建。 接受强制非空对象的方法,这些对象可从 staticfactory 方法获得。 以下示例演示如何使用:WriteOptions
QueryOptions
empty()
QueryOptions.builder()
QueryOptions queryOptions = QueryOptions.builder()
.consistencyLevel(ConsistencyLevel.ANY)
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
.readTimeout(Duration.ofSeconds(10))
.fetchSize(10)
.tracing(true)
.build();
重构为单列CassandraPersistentProperty
仅当您直接在映射模型上操作时,此更改才会影响您。
CassandraPersistentProperty
允许绑定以前的多个列名以供复合主键使用。 aare 列现在减少到单个列。 解析的复合主键映射到类 通过。CassandraPersistentProperty
MappingContext.getRequiredPersistentEntity(…)
从 Spring Data Cassandra 2.x 到 3.x 的迁移指南
Spring Data for Apache Cassandra 3.0 在从早期版本升级时引入了一组重大更改。
查看依赖项
升级到 Spring Data Cassandra 需要升级到 DataStax 驱动程序版本 4。升级到新驱动程序会带来传递依赖项更改,最值得注意的是,Google Guava由驱动程序捆绑和着色。 查看DataStax Java Driver for Apache Cassandra 4 Upgrade Guide,了解有关驱动程序相关更改的详细信息。
适应配置
DataStax Java Driver 4 将沙对象合并为单个对象,因此删除了所有相关的 API。 通过删除大多数移入的配置项(主要是基于文件的)对配置进行了大部分修订。 这意味着,现在通过其他方式配置了更多选项。Cluster
Session
CqlSession
Cluster
DriverConfigLoader
SocketOptions
AddressTranslator
如果使用基于 XML 的配置,请确保将所有配置文件从命名空间 () 迁移到命名空间 ()。cql
http://www.springframework.org/schema/cql https://www.springframework.org/schema/cql/spring-cql.xsd
cassandra
http://www.springframework.org/schema/data/cassandra https://www.springframework.org/schema/data/cassandra/spring-cassandra.xsd
为了反映配置构建器的变化,被重命名为现在接受而不是。 请确保在配置中还提供本地数据中心,因为正确配置负载平衡需要它。ClusterBuilderConfigurer
SessionBuilderConfigurer
CqlSessionBuilder
Cluster.Builder
连接
() 和 () 的配置元素合并为一个 single() 元素,该元素同时配置密钥空间和端点。Cluster
cassandra:cluster
Session
cassandra:session
CqlSession
cassandra:session
通过升级,架构支持被移动到一个新的命名空间元素:提供 abean。cassandra:session-factory
SessionFactory
例 117.版本 2 中的群集、会话和架构配置:
<cassandra:cluster contact-points="localhost" port="9042">
<cassandra:keyspace action="CREATE_DROP" name="mykeyspace" />
</cassandra:cluster>
<cassandra:session keyspace-name="mykeyspace" schema-action="CREATE">
<cassandra:startup-cql>CREATE TABLE …</cassandra:startup-cql>
</cassandra:session>
例 118.版本 3 中的会话和架构配置:
<cassandra:session contact-points="localhost" port="9042" keyspace="mykeyspace" local-datacenter="datacenter1">
<cassandra:keyspace action="CREATE_DROP" name="mykeyspace" />
</cassandra:session>
<cassandra:session-factory schema-action="CREATE">
<cassandra:script location="classpath:/schema.cql"/>
</cassandra:session-factory>
Spring Data Cassandra 3.0 在使用 XML 命名空间配置时不再注册默认的映射上下文、上下文和模板 API bean。 默认值应应用于应用程序或 Spring 引导级别。 |
模板接口
Apache Cassandra 的 Spring Data 将驱动程序升级带来的大部分更改封装为模板 API 和存储库支持,如果您的应用程序主要与映射实体或原始 Java 类型交互。
我们通常建议使用 createandobjects,因为工厂用法允许同步架构创建,并在使用多个数据库时引入一定程度的灵活性。CqlTemplate
CassandraTemplate
SessionFactory
例 119.版本 2 中的模板 API 配置:
<cql:template session-ref="…" />
<cassandra:template session-ref="…" cassandra-converter-ref="…"/>
例 120。版本 3 中的模板 API 配置:
<cassandra:session-factory />
<cassandra:cql-template session-factory-ref="…" />
<cassandra:template session-factory-ref="…" cassandra-converter-ref="…"/>
您必须在所有直接使用 DataStax 驱动程序 API 的地方调整您的代码。 典型案例包括:
- 的实现
ResultSetExtractor
- 的实现
RowCallbackHandler
- 的实现
RowMapper
- 包括异步和反应式变体的实现
PreparedStatementCreator
- 调用
CqlTemplate.queryForResultSet(…)
- 调用接受的方法
Statement
的变化AsyncCqlTemplate
DataStax 驱动程序 4 更改了异步运行的查询的结果类型。 若要反映这些更改,需要调整提供以下功能的代码:
- 的实现
AsyncSessionCallback
- 的实现
AsyncPreparedStatementCreator
结果集提取需要一个新的接口来用于 DataStax'.now,在以前使用过的地方使用。 请注意,它返回的是 a而不是标量对象,因此代码迁移可以在提取器中使用完全非阻塞的代码。AsyncResultSet
AsyncCqlTemplate
AsyncResultSetExtractor
ResultSetExtractor
AsyncResultSetExtractor.extractData(…)
Future
数据模型迁移
如果您使用以下功能,则数据模型可能需要更新:
-
@CassandraType
-
forceQuote
在,,,和@Table
@Column
@PrimaryKeyColumn
@PrimaryKey
@UserDefinedType
- 属性使用
java.lang.Date
- 属性使用或
UDTValue
TupleValue
@CassandraType
DataStax 驱动程序 4 不再附带枚举来描述 Cassandra 类型。 我们决定重新引入枚举。 确保更新导入以使用新引入的替换类型。Name
CassandraType.Name
强制报价
此标志现已弃用,我们建议不要再使用它。 Apache Cassandra 的 Spring Data 在内部使用驱动程序,确保在需要的地方引用。CqlIdentifier
物业类型
DataStax 驱动程序 4 不再使用。 请升级要使用的数据模型。 也请将原始 UDT 和元组类型迁移到新的驱动程序类型。java.lang.Date
java.time.LocalDateTime
UdtValue
TupleValue
其他更改
- 驱动程序的常量类被删除并重新引入,因为适应了。
ConsistencyLevel
DefaultConsistencyLevel
@Consistency
DefaultConsistencyLevel
-
RetryPolicy
Onandtypes被移除,没有替换。QueryOptions
…CqlTemplate
- 驱动程序的类型已删除。 现在使用分页状态。
PagingState
ByteBuffer
-
SimpleUserTypeResolver
接受代替。CqlSession
Cluster
-
SimpleTupleTypeFactory
已迁移 to.no 更长的时间需要 a/context。enum
SimpleTupleTypeFactory.INSTANCE
Cluster
CqlSession
- 介绍 在功能上构建语句,因为 QueryBuilder API 使用不可变的语句类型。
StatementBuilder
-
Session
Bean 更名为 FromtoandBean 更名为 Fromto。session
cassandraSession
SessionFactory
sessionFactory
cassandraSessionFactory
-
ReactiveSession
Bean 更名为 FromtoandBean 更名为 Fromto。reactiveSession
reactiveCassandraSession
ReactiveSessionFactory
reactiveSessionFactory
reactiveCassandraSessionFactory
-
ReactiveSessionFactory.getSession()
现在返回 a。 以前它只返回。Mono<ReactiveSession>
ReactiveSession
- 数据类型解析已移入,因此所有相关方法均已移入/移入(受影响的方法是,,,和)。
ColumnTypeResolver
DataType
CassandraPersistentEntity
CassandraPersistentProperty
ColumnTypeResolver
MappingContext.getDataType(…)
CassandraPersistentProperty.getDataType()
CassandraPersistentEntity.getUserType()
CassandraPersistentEntity.getTupleType()
- 架构创建已从 (受影响的方法是、和)。
MappingContext
SchemaFactory
CassandraMappingContext.getCreateTableSpecificationFor(…)
CassandraMappingContext.getCreateIndexSpecificationsFor(…)
CassandraMappingContext.getCreateUserTypeSpecificationFor(…)
弃用
-
CassandraCqlSessionFactoryBean
,而是使用。CqlSessionFactoryBean
-
KeyspaceIdentifier
并且,使用代替。CqlIdentifier
com.datastax.oss.driver.api.core.CqlIdentifier
-
CassandraSessionFactoryBean
,而是使用。CqlSessionFactoryBean
-
AbstractCqlTemplateConfiguration
,而是使用。AbstractSessionConfiguration
-
AbstractSessionConfiguration.getClusterName()
,而是使用。AbstractSessionConfiguration.getSessionName()
-
CodecRegistryTupleTypeFactory
,而是使用。SimpleTupleTypeFactory
- Spring Data的,请使用驱动程序代替。
CqlIdentifier
CqlIdentifier
-
forceQuote
属性作为引号不再需要。正确转义保留关键字并注意区分大小写。CqlIdentifier
-
fetchSize
Onandtypes已被弃用,使用代替QueryOptions
…CqlTemplate
pageSize
-
CassandraMappingContext.setUserTypeResolver(…)
,和:在 上配置这些属性。CassandraMappingContext.setCodecRegistry(…)
CassandraMappingContext.setCustomConversions(…)
CassandraConverter
-
TupleTypeFactory
和:不再用作卡桑德拉驱动程序与工厂方法的船。CassandraMappingContext.setTupleTypeFactory(…)
TupleTypeFactory
DataTypes.tupleOf(…)
- 不推荐通过 () 创建模式。 通过 () 创建密钥空间不受影响。
CqlSessionFactoryBean
cassandra:session
CqlSessionFactoryBean
cassandra:session
清除
配置接口
-
PoolingOptionsFactoryBean
-
SocketOptionsFactoryBean
-
CassandraClusterFactoryBean
-
CassandraClusterParser
-
CassandraCqlClusterFactoryBean
-
CassandraCqlClusterParser
-
CassandraCqlSessionParser
-
AbstractClusterConfiguration
-
ClusterBuilderConfigurer
(使用代替SessionBuilderConfigurer
公用事业
-
GuavaListenableFutureAdapter
-
QueryOptions
和构造函数获取和参数。 将构建器与执行配置文件结合使用作为替换。WriteOptions
ConsistencyLevel
RetryPolicy
-
CassandraAccessor.setRetryPolicy(…)
和方法。 使用执行配置文件作为替换。ReactiveCqlTemplate.setRetryPolicy(…)
命名空间支持
-
cql
命名空间(,使用代替)http://www.springframework.org/schema/cql
http://www.springframework.org/schema/data/cassandra
-
cassandra:cluster
(终结点属性合并到cassandra:session
) -
cql:template
,使用代替cassandra:cql-template
- 删除了隐式 Bean 注册映射上下文、上下文和模板 API bean。 这些必须明确声明。
增加
配置接口
-
CqlSessionFactoryBean
-
InitializeKeyspaceBeanDefinitionParser
-
SessionFactoryFactoryBean
包括通过以下方式创建架构KeyspacePopulator
-
KeyspacePopulator
和初始化密钥空间SessionFactoryInitializer
命名空间支持
-
cassandra:cluster
(终结点属性合并到cassandra:session
) -
cassandra:initialize-keyspace
命名空间支持 -
cassandra:session-factory
有支持cassandra:script
从 Spring Data Cassandra 3.x 到 4.x 的迁移指南
Spring Data for Apache Cassandra 4.0 在从早期版本升级时引入了一组重大更改。
异步模板接口
随着 的弃用,和 它们的依赖类被迁移到。 如果您的应用程序严重依赖并且您无法轻松迁移到那么我们建议您切换到子包中的遗留类型。 那是福兰德。ListenableFuture
AsyncCqlOperations
AsyncCassandraOperations
CompletableFuture
ListenableFuture
CompletableFuture
Async…Operations
legacy
org.springframework.data.cassandra.core.cql.legacy
AsyncCqlOperations
org.springframework.data.cassandra.core.legacy
AsyncCassandraOperations