跳到主要内容

迁移指南

Doubao 中英对照 Migration Guide

以下各节说明如何迁移到 Spring Data R2DBC 的更新版本。

从 1.1.x 升级到 1.2.x​

开发 Spring Data R2DBC 的初衷是评估 R2DBC 能在多大程度上与 Spring 应用集成。其中一个主要方面是,一旦 R2DBC 支持被证明有用,就将核心支持移入 Spring Framework。Spring Framework 5.3 附带了一个新模块:Spring R2DBC(spring-r2dbc)。

spring-r2dbc 提供了最初由 Spring Data R2DBC 提供的 R2DBC 核心功能(DatabaseClient 的精简变体、事务管理器、连接工厂初始化、异常转换)。1.2.0 版本通过进行以下各节所述的若干更改,与 Spring R2DBC 所提供的内容保持一致。

Spring R2DBC 的 DatabaseClient 是一个更轻量的实现,封装了一个纯面向 SQL 的接口。您会注意到,运行 SQL 语句的方法从 DatabaseClient.execute(…) 变为了 DatabaseClient.sql(…)。用于 CRUD 操作的流式 API 已移入 R2dbcEntityTemplate。

如果您通过 logger 前缀 org.springframework.data.r2dbc 记录 SQL 语句,请务必将其更新为 org.springframework.r2dbc(即去掉 .data),以指向 Spring R2DBC 组件。

弃用项​

  • 弃用 o.s.d.r2dbc.core.DatabaseClient 及其支持类 ConnectionAccessor、FetchSpec、SqlProvider 等。命名参数支持类(如 NamedParameterExpander)已被 Spring R2DBC 的 DatabaseClient 实现封装,因此我们不再提供替代方案,因为这本就是内部 API。请使用 o.s.r2dbc.core.DatabaseClient 以及可从 org.springframework.r2dbc.core 获取的 Spring R2DBC 替代类。基于实体的方法(select/insert/update/delete)可通过 R2dbcEntityTemplate 使用,该类在 1.1 版本中引入。

  • 弃用 o.s.d.r2dbc.connectionfactory、o.s.d.r2dbc.connectionfactory.init 和 o.s.d.r2dbc.connectionfactory.lookup 包。请使用 Spring R2DBC 的对应版本,可在 o.s.r2dbc.connection 找到。

  • 弃用 o.s.d.r2dbc.convert.ColumnMapRowMapper。请改用 o.s.r2dbc.core.ColumnMapRowMapper。

  • 弃用绑定支持类 o.s.d.r2dbc.dialect.Bindings、BindMarker、BindMarkers、BindMarkersFactory 及相关类型。请使用 org.springframework.r2dbc.core.binding 中的替代类。

  • 弃用 BadSqlGrammarException、UncategorizedR2dbcException 以及 o.s.d.r2dbc.support 处的异常转换。Spring R2DBC 提供了一个精简的异常转换变体,暂未提供 SPI,可通过 o.s.r2dbc.connection.ConnectionFactoryUtils#convertR2dbcException 使用。

使用 Spring R2DBC 提供的替代类​

为简化迁移,若干被弃用的类型现在是 Spring R2DBC 所提供替代类的子类型。Spring Data R2DBC 修改了若干方法,或引入了接受 Spring R2DBC 类型的新方法。具体而言,以下类发生了更改:

  • R2dbcEntityTemplate

  • R2dbcDialect

  • org.springframework.data.r2dbc.query 中的类型

如果您直接使用这些类型,建议您检查并更新相关 import。

破坏性更改​

  • OutboundRow 和语句映射器已从使用 SettableValue 切换为使用 Parameter

  • 仓库工厂支持需要 o.s.r2dbc.core.DatabaseClient,而非 o.s.data.r2dbc.core.DatabaseClient。

依赖更改​

要使用 Spring R2DBC,请确保包含以下依赖:

  • org.springframework:spring-r2dbc