日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

dbc数据库 与 mysql_使用反应式关系数据库连接规范R2DBC操作MySQL数据库

發布時間:2025/3/20 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dbc数据库 与 mysql_使用反应式关系数据库连接规范R2DBC操作MySQL数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 簡介

三月份已經介紹過R2DBC,它是一種異步的、非阻塞的關系式數據庫連接規范。盡管一些NoSQL數據庫供應商為其數據庫提供了反應式數據庫客戶端,但對于大多數項目而言,遷移到NoSQL并不是一個理想的選擇。這促使了一個通用的響應式關系數據庫連接規范的誕生。 作為擁有龐大用戶群的關系式數據庫MySQL也有了反應式驅動,不過并不是官方的。但是Spring官方將其納入了依賴池,說明該類庫的質量并不低。所以今天就嘗嘗鮮,試一下使用R2DBC連接MySQL。

2. 環境依賴

基于Spring Boot 2.3.1和Spring Data R2DBC,還有反應式Web框架Webflux,同時也要依賴r2dbc-mysql庫,所有的Maven依賴為:

dev.miku

r2dbc-mysql

org.springframework.boot

spring-boot-starter-data-r2dbc

org.springframework.boot

spring-boot-starter-data-jdbc

org.springframework.boot

spring-boot-starter-webflux

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());

}

當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 clientUserFlux() {

return databaseClient.execute("select * from client_user").as(ClientUser.class)

.fetch()

.all();

}

/**

* 響應式寫入.

*

* @return Mono對象包含更新成功的條數

*/

@GetMapping("/add")

public Mono 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的感覺。另外這里有一份Spring官方關于R2DBC的PPT,也是讓你更好了解R2DBC的權威資料。可以關注:碼農小胖哥 回復r2dbc獲取。

關注公眾號:Felordcn 獲取更多資訊

總結

以上是生活随笔為你收集整理的dbc数据库 与 mysql_使用反应式关系数据库连接规范R2DBC操作MySQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。