引导设置工作环境的一种简单方法是在 Spring Tools从 Spring Initializr 创建一个基于 Spring 的项目。Spring中文文档

首先,您需要设置正在运行的数据库服务器。 请参阅供应商文档,了解如何配置数据库以进行 R2DBC 访问。Spring中文文档

要求

Spring Data R2DBC 需要 Spring Framework 6.1.9 及更高版本。Spring中文文档

在数据库方面,Spring Data R2DBC 需要一个驱动程序来抽象出特定于供应商的常见 SQL 功能。 Spring Data R2DBC 包括对以下数据库的直接支持:Spring中文文档

如果使用其他数据库,则应用程序将无法启动。 方言部分包含有关在这种情况下如何进行的更多详细信息。Spring中文文档

世界您好

要在 STS 中创建 Spring 项目,请执行以下操作:Spring中文文档

  1. 转到“文件”→“新建→ Spring Template Project”→“简单 Spring 实用程序项目”,并在出现提示时按“是”。 然后输入项目和包名称,例如 .org.spring.r2dbc.exampleSpring中文文档

  2. 将以下内容添加到 files 元素中:pom.xmldependenciesSpring中文文档

  3. 将以下内容添加到 pom.xml files 元素中:dependenciesSpring中文文档

    <dependencies>
    
      <!-- other dependency elements omitted -->
    
      <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-r2dbc</artifactId>
        <version>3.3.1</version>
      </dependency>
    
      <!-- a R2DBC driver -->
      <dependency>
        <groupId>io.r2dbc</groupId>
        <artifactId>r2dbc-h2</artifactId>
        <version>x.y.z</version>
      </dependency>
    
    </dependencies>
  4. 将 Spring in the pom.xml 的版本更改为Spring中文文档

    <spring.version>6.1.9</spring-framework.version>
  5. 将 Maven 的 Spring Milestone 存储库的以下位置添加到您的位置,使其与您的元素处于同一级别:pom.xml<dependencies/>Spring中文文档

    <repositories>
      <repository>
        <id>spring-milestone</id>
        <name>Spring Maven MILESTONE Repository</name>
        <url>https://repo.spring.io/milestone</url>
      </repository>
    </repositories>

存储库也可以在此处浏览Spring中文文档

您可能还希望将日志记录级别设置为查看一些其他信息。 为此,请编辑文件以包含以下内容:DEBUGapplication.propertiesSpring中文文档

logging.level.org.springframework.r2dbc=DEBUG

然后,例如,可以创建一个要保留的类,如下所示:PersonSpring中文文档

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中文文档

CREATE TABLE person
  (id VARCHAR(255) PRIMARY KEY,
   name VARCHAR(255),
   age INT);

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

import io.r2dbc.spi.ConnectionFactories;
import io.r2dbc.spi.ConnectionFactory;
import reactor.test.StepVerifier;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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中文文档

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]

即使在这个简单的例子中,也有几点需要注意:Spring中文文档

  • 您可以使用标准对象在 Spring Data R2DBC() 中创建中央帮助程序类的实例。R2dbcEntityTemplateio.r2dbc.spi.ConnectionFactorySpring中文文档

  • 映射器适用于标准 POJO 对象,无需任何额外的元数据(尽管您可以选择提供该信息 - 请参阅此处)。Spring中文文档

  • 映射约定可以使用字段访问。请注意,该类只有 geters。PersonSpring中文文档

  • 如果构造函数参数名称与存储行的列名称匹配,则它们用于实例化对象。Spring中文文档

示例存储库

有一个 GitHub 存储库,其中包含多个示例,您可以下载和使用这些示例来了解该库的工作原理。Spring中文文档

使用 Spring 连接到关系数据库

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

使用 Java 配置注册实例ConnectionFactory

以下示例显示了使用基于 Java 的 Bean 元数据注册 Instance of 的示例:io.r2dbc.spi.ConnectionFactorySpring中文文档

使用 Java 配置注册对象io.r2dbc.spi.ConnectionFactory
@Configuration
public class ApplicationConfiguration extends AbstractR2dbcConfiguration {

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

此方法允许您使用标准实例,而容器使用 Spring 的 .与直接注册实例相比,配置支持还有一个额外的优势,即还为容器提供了一个实现,该实现将 R2DBC 异常转换为 Spring 的可移植层次结构中的异常,用于使用注释注释的数据访问类。Spring 的 DAO 支持功能中描述了这种层次结构和用法。io.r2dbc.spi.ConnectionFactoryAbstractR2dbcConfigurationConnectionFactoryExceptionTranslatorDataAccessException@Repository@RepositorySpring中文文档

AbstractR2dbcConfiguration还有寄存器,这是数据库交互和存储库实现所必需的。DatabaseClientSpring中文文档

方言

Spring Data R2DBC 使用 a 封装特定于数据库或其驱动程序的行为。 Spring Data R2DBC 通过检查数据库细节并相应地选择适当的数据库方言来响应数据库细节。 如果使用的数据库没有可用的方言,则应用程序将无法启动。 在这种情况下,您必须要求供应商提供实施。 或者,您可以实现自己的 .DialectConnectionFactoryDialectDialectSpring中文文档

方言由 DialectResolver 从 解析,通常通过检查 。 + 你可以让 Spring 通过注册一个实现 . 使用 Spring 的 . 为此,请执行以下操作:ConnectionFactoryConnectionFactoryMetadataR2dbcDialectorg.springframework.data.r2dbc.dialect.DialectResolver$R2dbcDialectProviderMETA-INF/spring.factoriesDialectResolverSpringFactoriesLoaderSpring中文文档

  1. 实现你自己的.DialectSpring中文文档

  2. 实现返回 .R2dbcDialectProviderDialectSpring中文文档

  3. 通过在下创建资源来注册提供程序,并通过添加一行来执行注册spring.factoriesMETA-INF
    org.springframework.data.r2dbc.dialect.DialectResolver$R2dbcDialectProvider=<fully qualified name of your R2dbcDialectProvider>Spring中文文档

方言由 DialectResolver 从 解析,通常通过检查 。 + 你可以让 Spring 通过注册一个实现 . 使用 Spring 的 . 为此,请执行以下操作:ConnectionFactoryConnectionFactoryMetadataR2dbcDialectorg.springframework.data.r2dbc.dialect.DialectResolver$R2dbcDialectProviderMETA-INF/spring.factoriesDialectResolverSpringFactoriesLoaderSpring中文文档

  1. 实现你自己的.DialectSpring中文文档

  2. 实现返回 .R2dbcDialectProviderDialectSpring中文文档

  3. 通过在下创建资源来注册提供程序,并通过添加一行来执行注册spring.factoriesMETA-INF
    org.springframework.data.r2dbc.dialect.DialectResolver$R2dbcDialectProvider=<fully qualified name of your R2dbcDialectProvider>Spring中文文档