前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring认证中国教育管理中心-Spring Data R2DBC框架教程一

Spring认证中国教育管理中心-Spring Data R2DBC框架教程一

原创
作者头像
IT胶囊
发布2021-12-06 15:06:20
4180
发布2021-12-06 15:06:20
举报
文章被收录于专栏:IT技能应用

13. R2DBC 支持

R2DBC 包含广泛的功能:

  • Spring 配置支持@ConfigurationR2DBC 驱动程序实例的基于 Java 的类。
  • R2dbcEntityTemplate 作为实体绑定操作的中心类,在执行具有行和 POJO 之间集成对象映射的常见 R2DBC 操作时提高生产力。
  • 功能丰富的对象映射与 Spring 的转换服务集成。
  • 基于注释的映射元数据可扩展以支持其他元数据格式。
  • Repository 接口的自动实现,包括对自定义查询方法的支持。

对于大多数任务,您应该使用R2dbcEntityTemplate或存储库支持,它们都使用丰富的映射功能。 R2dbcEntityTemplate是寻找访问功能(例如临时 CRUD 操作)的地方。

13.1.入门

设置工作环境的一种简单方法是通过start.spring.io创建一个基于 Spring 的项目。这样做:

  1. 将以下内容添加到 pom.xml 文件dependencies元素:

<dependencyManagement> <dependencies> <dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-bom</artifactId> <version>${r2dbc-releasetrain.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- other dependency elements omitted --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-r2dbc</artifactId> <version>1.4.0</version> </dependency> <!-- a R2DBC driver --> <dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-h2</artifactId> <version>Arabba-SR10</version> </dependency> </dependencies>

Spring认证中国教育管理中心-Spring Data R2DBC框架教程一
Spring认证中国教育管理中心-Spring Data R2DBC框架教程一
  1. 将 pom.xml 中 Spring 的版本改为<spring-framework.version>5.3.13</spring-framework.version>
  2. 将 Maven 的 Spring Milestone 存储库的以下位置添加到您的位置pom.xml,使其与您的<dependencies/>元素处于同一级别:<repositories> <repository> <id>spring-milestone</id> <name>Spring Maven MILESTONE Repository</name> <url>https://repo.spring.io/libs-milestone</url> </repository> </repositories>

存储库也可在此处浏览。

您可能还希望将日志记录级别设置为DEBUG以查看一些附加信息。为此,请编辑application.properties文件以具有以下内容:

代码语言:javascript
复制
logging.level.org.springframework.r2dbc=DEBUG

然后你可以,例如,创建一个Person类来持久化,如下所示:

代码语言:javascript
复制
public class Person {

  private final String id;
  private final String name;
  private final int age;

  public Person(String id, String name, int age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }

  public String getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }

  @Override
  public String toString() {
    return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
  }
}
Spring认证中国教育管理中心-Spring Data R2DBC框架教程一
Spring认证中国教育管理中心-Spring Data R2DBC框架教程一

接下来,您需要在您的数据库中创建一个表结构,如下所示:

代码语言:javascript
复制
CREATE TABLE person
  (id VARCHAR(255) PRIMARY KEY,
   name VARCHAR(255),
   age INT);

您还需要一个主应用程序来运行,如下所示:

代码语言:javascript
复制
import io.r2dbc.spi.ConnectionFactories;
import io.r2dbc.spi.ConnectionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import reactor.test.StepVerifier;

import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;

public class R2dbcApp {

  private static final Log log = LogFactory.getLog(R2dbcApp.class);

  public static void main(String[] args) {

    ConnectionFactory connectionFactory = ConnectionFactories.get("r2dbc:h2:mem:///test?options=DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");

    R2dbcEntityTemplate template = new R2dbcEntityTemplate(connectionFactory);

    template.getDatabaseClient().sql("CREATE TABLE person" +
        "(id VARCHAR(255) PRIMARY KEY," +
        "name VARCHAR(255)," +
        "age INT)")
      .fetch()
      .rowsUpdated()
      .as(StepVerifier::create)
      .expectNextCount(1)
      .verifyComplete();

    template.insert(Person.class)
      .using(new Person("joe", "Joe", 34))
      .as(StepVerifier::create)
      .expectNextCount(1)
      .verifyComplete();

    template.select(Person.class)
      .first()
      .doOnNext(it -> log.info(it))
      .as(StepVerifier::create)
      .expectNextCount(1)
      .verifyComplete();
  }
}
Spring认证中国教育管理中心-Spring Data R2DBC框架教程一
Spring认证中国教育管理中心-Spring Data R2DBC框架教程一

运行主程序时,前面的示例会生成类似于以下内容的输出:

代码语言:javascript
复制
2018-11-28 10:47:03,893 DEBUG amework.core.r2dbc.DefaultDatabaseClient: 310 - Executing SQL statement [CREATE TABLE person
  (id VARCHAR(255) PRIMARY KEY,
   name VARCHAR(255),
   age INT)]
2018-11-28 10:47:04,074 DEBUG amework.core.r2dbc.DefaultDatabaseClient: 908 - Executing SQL statement [INSERT INTO person (id, name, age) VALUES($1, $2, $3)]
2018-11-28 10:47:04,092 DEBUG amework.core.r2dbc.DefaultDatabaseClient: 575 - Executing SQL statement [SELECT id, name, age FROM person]
2018-11-28 10:47:04,436  INFO        org.spring.r2dbc.example.R2dbcApp:  43 - Person [id='joe', name='Joe', age=34]

即使在这个简单的例子中,也有几件事需要注意:

  • 您可以R2dbcEntityTemplate使用标准io.r2dbc.spi.ConnectionFactory对象在 Spring Data R2DBC ( ) 中创建中央助手类的实例。
  • 映射器针对标准 POJO 对象工作,无需任何额外的元数据(尽管您可以选择提供该信息 — 请参阅此处。)。
  • 映射约定可以使用字段访问。注意Person该类只有 getter。
  • 如果构造函数参数名称与存储行的列名称匹配,则它们用于实例化对象。

13.2.示例库

有一个包含多个示例的GitHub 存储库,您可以下载并试用这些示例,以了解该库的工作原理。

13.3.使用 Spring 连接到关系数据库

使用关系数据库和 Spring 时的首要任务之一是 io.r2dbc.spi.ConnectionFactory使用 IoC 容器创建对象。确保使用支持的数据库和驱动程序。

13.3.1.ConnectionFactory使用基于 Java 的元数据注册实例

以下示例显示了使用基于 Java 的 bean 元数据注册 的实例的示例 io.r2dbc.spi.ConnectionFactory:

示例 54.io.r2dbc.spi.ConnectionFactory使用基于 Java 的 bean 元数据注册对象

代码语言:javascript
复制
@Configuration
public class ApplicationConfiguration extends AbstractR2dbcConfiguration {

  @Override
  @Bean
  public ConnectionFactory connectionFactory() {
    return …
  }
}

这种方法允许您使用标准 io.r2dbc.spi.ConnectionFactory实例,容器使用 Spring 的AbstractR2dbcConfiguration.As 与ConnectionFactory直接注册实例相比,配置支持具有额外的优势,即还为容器提供了一个ExceptionTranslator实现,将 R2DBC 异常转换为 Spring 的可移植DataAccessException数据层次结构中的异常访问用@Repository注解注解的类。Spring的 DAO 支持特性中@Repository描述了这种层次结构和使用。

AbstractR2dbcConfiguration还 registers DatabaseClient,这是数据库交互和存储库实现所必需的。

13.3.2.R2DBC 驱动程序

Spring Data R2DBC 通过 R2DBC 的可插拔 SPI 机制支持驱动程序。您可以使用任何通过 Spring Data R2DBC 实现 R2DBC 规范的驱动程序。由于 Spring Data R2DBC 会对每个数据库的特定功能做出反应,因此它需要一个Dialect实现,否则您的应用程序将无法启动。Spring Data R2DBC 附带了以下驱动程序的方言实现:

  • H2 ( io.r2dbc:r2dbc-h2)
  • 玛丽亚数据库( org.mariadb:r2dbc-mariadb)
  • Microsoft SQL Server ( io.r2dbc:r2dbc-mssql)
  • MySQL ( dev.miku:r2dbc-mysql)
  • jasync-sql MySQL ( com.github.jasync-sql:jasync-r2dbc-mysql)
  • Postgres ( io.r2dbc:r2dbc-postgresql)
  • 甲骨文( com.oracle.database.r2dbc:oracle-r2dbc)

Spring Data R2DBC 通过检查ConnectionFactory和选择适当的数据库方言来对数据库细节做出反应。R2dbcDialect如果 Spring Data R2DBC 还不知道您使用的驱动程序,则需要自行配置。

方言由DialectResolverfrom a解析ConnectionFactory,通常通过检查 ConnectionFactoryMetadata. + 您可以R2dbcDialect通过注册一个org.springframework.data.r2dbc.dialect.DialectResolver$R2dbcDialectProvider通过META-INF/spring.factories. DialectResolver使用 Spring 的SpringFactoriesLoader.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 13.1.入门
  • 13.2.示例库
  • 13.3.使用 Spring 连接到关系数据库
  • 13.3.1.ConnectionFactory使用基于 Java 的元数据注册实例
  • 13.3.2.R2DBC 驱动程序
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档