Spring5复习:r2dbc的测试和使用

当前版本:Spring5.3.0,spring-r2dbc5.3.0

1.声明

当前内容主要用于本人学习和复习之用,使用这个R2DBC方式操作数据库,这里为mysql
使用条件:

  1. 突然发现Spring官方中有这个,所以打算研究一下
  2. 当前需要的Spring依赖为5.3.0版本
  3. 需要导入各种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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值