在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何理解反应式数据库驱动规范R2DBC

120次阅读
没有评论

共计 3330 个字符,预计需要花费 9 分钟才能阅读完成。

本篇文章为大家展示了如何理解反应式数据库驱动规范 R2DBC,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1. 简介

R2DBC 是一种异步的、非阻塞的关系式数据库连接规范。尽管一些 NoSQL 数据库供应商为其数据库提供了反应式数据库客户端,但对于大多数项目而言,迁移到 NoSQL 并不是一个理想的选择。这促使了一个通用的响应式关系数据库连接规范的诞生。作为拥有庞大用户群的关系式数据库 MySQL 也有了反应式驱动,不过并不是官方的。但是 Spring 官方将其纳入了依赖池,说明该类库的质量并不低。所以今天就尝尝鲜,试一下使用 R2DBC 连接 MySQL。

2. 环境依赖

基于 Spring Boot 2.3.1 和 Spring Data R2DBC,还有反应式 Web 框架 Webflux,同时也要依赖 r2dbc-mysql 库,所有的 Maven 依赖为:

 
 !--r2dbc mysql  库 -- 
  dependency 
  groupId dev.miku /groupId 
  artifactId r2dbc-mysql /artifactId 
  /dependency 
  !--Spring r2dbc  抽象层 -- 
  dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-starter-data-r2dbc /artifactId 
  /dependency 
  !-- 自动配置需要引入的一个嵌入式数据库类型对象 -- 
  dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-starter-data-jdbc /artifactId 
  /dependency 
 
 !-- 反应式 web 框架 -- 
  dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-starter-webflux /artifactId 
  /dependency

MySQL 版本为 5.7,没有测试其它版本。

3. R2DBC 配置

所有的 R2DBC 自动配置都在 org.springframework.boot.autoconfigure.data.r2dbc 包下,如果要配置 MySQL 必须针对性的配置对应的连接工厂接口 ConnectionFactory,当然也可以通过 application.yml 配置。个人比较喜欢 JavaConfig。

@Bean
ConnectionFactory connectionFactory() { return MySqlConnectionFactory.from(MySqlConnectionConfiguration.builder()
 .host(127.0.0.1)
 .port(3306)
 .username(root)
 .password(123456)
 .database(database_name)
 
//  额外的其它非必选参数省略  
 .build());
}

详细配置可参考 r2dbc-mysql 的官方说明:https://github.com/mirromutth/r2dbc-mysql

当 ConnectionFactory 配置好后,就会被注入 DatabaseClient 对象。该对象是非阻塞的,用于执行数据库反应性客户端调用与反应流背压请求。我们可以通过该接口反应式地操作数据库。

4. 编写反应式接口

我们先创建一张表并写入一些数据:

create table client_user
 user_id 
varchar(64) not null comment 
 用户唯一标示  primary key,
 username varchar(64) null comment 
 名称 ,
 phone_number varchar(64) null comment 
 手机号 ,
 gender tinyint(1) default 
0 
null comment 
 0  未知  1  男  2  女   
)

对应的实体为:

package cn.felord.r2dbc.config;
import lombok.Data;
 * @author felord.cn
 */
@Data
public class ClientUser {
 private String userId;
 private String username;
 private String phoneNumber;
 private Integer gender;
}

然后我们编写一个 Webflux 的反应式接口:

package cn.felord.r2dbc.config;
import org.springframework.data.r2dbc.core.DatabaseClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import javax.annotation.Resource;
 * The type User controller.
 *
 * @author felord.cn
 * @since 17 :07
 */
@RestController
@RequestMapping(/user)
public class UserController {
 @Resource
 private DatabaseClient databaseClient;
 /**
 
*  查询
 
 
* @return  返回 Flux 序列   包含所有的 ClientUser
 
 @GetMapping(/get)
 public Flux ClientUser  clientUserFlux() { return databaseClient.execute( select * from client_user).as(ClientUser.class)
 .fetch()
 .all();
 }
 /**
 
*  响应式写入.
 
 
* @return Mono 对象包含更新成功的条数
 
 @GetMapping(/add)
 public Mono Integer  insert() { ClientUser clientUser = new ClientUser();
 clientUser.setUserId( 34345514644 
 clientUser.setUsername( felord.cn 
 clientUser.setPhoneNumber( 3456121 
 clientUser.setGender(1);
 return databaseClient.insert().into(ClientUser.class)
 .using(clientUser)
 .fetch().rowsUpdated();
 }
}

调用接口就能获取到期望的数据结果。

5. 总结

乍一看 R2DBC 并没有想象中的那么难,但是间接的需要了解 Flux、Mono 等抽象概念。同时目前来说如果不和 Webflux 框架配合也没有使用场景。就本文的 MySQL 而言,R2DBC 驱动还是社区维护(不得不说 PgSQL 就做的很好)。

然而需要你看清的是反应式才是未来。如果你要抓住未来就需要现在就了解一些相关的知识。这让我想起五年前刚刚接触 Spring Boot 的感觉。

上述内容就是如何理解反应式数据库驱动规范 R2DBC,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计3330字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产成人19禁在线观看 | 欧美国产日韩一区二区三区 | 在线色视频网站 | 国产免费福利视频一区二区 | 成人免费观看视频高清视频 | 欧美顶级少妇做爰hd | 精品欧美一区二区三区四区 | 亚洲成人bt | 狠狠色噜噜狠狠狠狠777米奇 | 欧美 亚洲 校园 第一页 | 国产在线精品一区二区不卡 | 国产精品久久毛片av大全日韩 | 国产日韩网站 | 亚洲国产精华液网站w | 亚洲性久久 | 宅男在线精品观看 | 欧美xxxx性老妇 | 精品人妻av区乱码 | 国产亚洲精品久久麻豆 | 熟女无套高潮内谢吼叫免费 | 国产精品热久久毛片 | 国产精品欧美在线观看 | 国偷自产视频一区二区久 | 久久精品国产亚洲av蜜臀色欲 | 日韩精品无码专区免费播放 | 久久久精品中文字幕 | 精品国产一级毛片大全 | 国产精品人人做人人爽人人添 | 搡8o老女人老妇人老熟 | 成人在线一区二区 | 日韩精品无码中文字幕电影 | 香蕉久久夜色精品国产小优 | 亚洲精品无码久久久久sm | 国产精品永久免费 | 热99在线视频 | 2018日日夜夜操 | 亚洲午夜网未来影院 | 国产免费福利视频一区二区 | 成人亚洲欧美日韩在线观看 | 国产三级视频 | 亚洲人成网站在线播放观看 |