diff --git a/spring/spring data r2dbc/r2dbc.md b/spring/spring data r2dbc/r2dbc.md
new file mode 100644
index 0000000..7c46a88
--- /dev/null
+++ b/spring/spring data r2dbc/r2dbc.md
@@ -0,0 +1,117 @@
+# R2DBC
+## Getting Started
+### 引入pom
+在spring boot项目中,如果要适配spring data r2dbc,可以引入如下pom依赖:
+```xml
+
+ org.springframework.boot
+ spring-boot-starter-data-r2dbc
+
+
+
+ io.asyncer
+ r2dbc-mysql
+ 1.4.1
+
+```
+### create pojo & create table
+之后,可以创建如下实体:
+```java
+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 + "]";
+ }
+}
+```
+创建table:
+```sql
+CREATE TABLE person(
+ id VARCHAR(255) PRIMARY KEY,
+ name VARCHAR(255),
+ age INT
+);
+```
+### 声明ConnectionFactory
+```java
+@Configuration
+@Slf4j
+public class ConnectionFactoryConf extends AbstractR2dbcConfiguration {
+ @Bean
+ public ConnectionFactory connectionFactory() {
+// ConnectionFactories.get("jdbc:mysql://localhost:3306/innodb_demo?useSSL=false&rewriteBatchedStatements=true")
+// .
+ ConnectionFactoryOptions options = ConnectionFactoryOptions.builder()
+ .option(ConnectionFactoryOptions.HOST, "localhost")
+ .option(ConnectionFactoryOptions.PORT, 3306)
+ .option(ConnectionFactoryOptions.DRIVER, "mysql")
+ .option(ConnectionFactoryOptions.USER, "rw_all_db")
+ .option(ConnectionFactoryOptions.PASSWORD, "ab19971025")
+ .option(ConnectionFactoryOptions.DATABASE, "asahi_schedule")
+ .build();
+ ConnectionPoolConfiguration poolConf = ConnectionPoolConfiguration.builder()
+ .connectionFactory(ConnectionFactories.get(options))
+ .maxSize(10)
+ .validationQuery("SELECT 1")
+ .build();
+ return new ConnectionPool(poolConf);
+ }
+}
+```
+在上述示例中,Conf类继承了AbstractR2dbcConfiguration类,相比于直接注入`connectionFactory`对象,通过AbstractR2dbcConfiguration注册能够提供ExceptionTranslator,将r2dbc中的异常翻译为DataAccessException。
+
+### 通过R2dbcEntityTemplate操作数据库
+通过entityTemplate操作数据库的示例如下:
+```java
+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();
+ }
+```
+在上述示例中,pojo到table的映射会自动生效,并不需要额外的元数据。
+### Dialects
+spring data R2DBC会使用Dialect来对`特定数据库/driver的行为`进行封装。
\ No newline at end of file