遷移指南

以下章節解釋瞭如何遷移到更新版本的 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 提供了核心 R2DBC 功能(DatabaseClient 的精簡變體、事務管理器、連線工廠初始化、異常轉換),這些功能最初由 Spring Data R2DBC 提供。1.2.0 版本透過進行以下章節中概述的幾項更改,與 Spring R2DBC 中提供的內容保持一致。

Spring R2DBC 的 DatabaseClient 是一個更輕量級的實現,它封裝了一個純 SQL 導向的介面。您會注意到,執行 SQL 語句的方法從 DatabaseClient.execute(…) 更改為 DatabaseClient.sql(…)。用於 CRUD 操作的流式 API 已移至 R2dbcEntityTemplate 中。

如果您透過日誌字首 org.springframework.data.r2dbc 記錄 SQL 語句,請務必將其更新為 org.springframework.r2dbc(即移除 .data),以指向 Spring R2DBC 元件。

已棄用項

  • o.s.d.r2dbc.core.DatabaseClient 及其支援類 ConnectionAccessorFetchSpecSqlProvider 等已棄用。命名引數支援類(如 NamedParameterExpander)被 Spring R2DBC 的 DatabaseClient 實現封裝,因此我們不提供替代項,因為這本來就是內部 API。請使用 o.s.r2dbc.core.DatabaseClient 及其 Spring R2DBC 提供的替代項,這些替代項位於 org.springframework.r2dbc.core 中。基於實體的方法(select/insert/update/delete)可透過 R2dbcEntityTemplate 獲取,該類在版本 1.1 中引入。

  • o.s.d.r2dbc.connectionfactoryo.s.d.r2dbc.connectionfactory.inito.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.BindingsBindMarkerBindMarkersBindMarkersFactory 等繫結支援類和相關型別已棄用。請使用 org.springframework.r2dbc.core.binding 中的替代項。

  • BadSqlGrammarExceptionUncategorizedR2dbcException 以及 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 中的型別

如果您直接使用這些型別,建議您檢查並更新匯入項。

重大變更

  • OutboundRow 和語句對映器從使用 SettableValue 切換到 Parameter

  • Repository 工廠支援需要 o.s.r2dbc.core.DatabaseClient,而不是 o.s.data.r2dbc.core.DatabaseClient

依賴變更

要使用 Spring R2DBC,請確保包含以下依賴項

  • org.springframework:spring-r2dbc