当前版本:Spring5.3.0,spring-r2dbc5.3.0
1.声明
当前内容主要用于本人学习和复习之用,使用这个R2DBC方式操作数据库,这里为mysql
使用条件:
- 突然发现Spring官方中有这个,所以打算研究一下
- 当前需要的Spring依赖为5.3.0版本
- 需要导入各种r2dbc对应的数据库驱动包
2.pom依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!-- 用于5.3.0版本用于测试当前的r2dbc -->
<spring.version>5.3.0</spring.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<!-- <dependency> 这个是最近新建立的2020都在更新 <groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId> <version>2.1.1</version> </dependency> -->
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- 导入最基本的spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm,其中包含了jpa和hibernate -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 测试r2dbc的依赖起始点 -->
<!-- 测试出现问题,需要spring版本为:5.3.0 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-r2dbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-r2dbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>dev.miku</groupId>
<artifactId>r2dbc-mysql</artifactId>
<version>0.8.2.RELEASE</version>
</dependency>
</dependencies>
3.demo
public class R2DBCTest {
public static void main(String[] args) {
/*
ConnectionFactoryOptions options=ConnectionFactoryOptions.builder()
.option(ConnectionFactoryOptions.DRIVER, "mysql")
.option(ConnectionFactoryOptions.PROTOCOL, "pipes")
.option(ConnectionFactoryOptions.HOST, "localhost")
.option(ConnectionFactoryOptions.PORT, 3306)
.option(ConnectionFactoryOptions.DATABASE, "my_database")
.option(Option.valueOf("locale"), "en_US")
.build();
*/
String url ="r2dbcs:mysql://root:root@127.0.0.1:3306/test";
ConnectionFactory connectionFactory =ConnectionFactories.get(url);
DatabaseClient client = DatabaseClient.create(connectionFactory);
System.out.println(client);
// 1.创建表操作
//Mono<Void> completion = client.sql("CREATE TABLE user (id int NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));").then();
// 简单的查询操作,默认查询第一个数据
Mono<Map<String, Object>> first = client.sql("SELECT id, name FROM user")
.fetch().first();
System.out.println(first); // 这里返回的是MonoNext
Map<String, Object> block = first.block();
System.out.println(block);
//条件查询,sql这里为使用占位符方式
Mono<Map<String, Object>> result = client.sql("SELECT id, name FROM user WHERE name = :fn")
.bind("fn", "admin") //这里为绑定数据
.fetch().first();
block = result.block();
System.out.println(block);
// 查询所有的信息,并获取指定的列,结果发现不存在,因为没有查询id信息
Flux<String> names = client.sql("SELECT name FROM user")
.map(row -> row.get("id", String.class))
.all();
System.out.println(names);//返回结果(FluxOnErrorResume)不存在,但是这里不会报错,获取数据的时候报错
// 更新数据信息
Mono<Integer> affectedRows = client.sql("UPDATE user SET name = :name where id = :id")
.bind("name", "Joe")
.bind("id", 1)
.fetch().rowsUpdated();
System.out.println(affectedRows.block());// 更新成功
// 添加数据
Mono<Integer> insert = client.sql("INSERT INTO user (name) VALUES(:name)")
.bind("name", "joe").fetch().rowsUpdated();
System.out.println(insert.block());
//等等其他的东西都可以通过sql方式获取数据,其他的操作查看Spring的操作
}
}
这里最主要的就是:
String url =“r2dbcs:mysql://root:root@127.0.0.1:3306/test”;
ConnectionFactory connectionFactory =ConnectionFactories.get(url);
只要弄好这部分其他的就是sql的事情,感觉操作比较简单,返回一般都是包装后的类
全部测试都成功:其他的可以参考官方的GitHub