真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解反應(yīng)式數(shù)據(jù)庫驅(qū)動規(guī)范R2DBC

本篇文章為大家展示了如何理解反應(yīng)式數(shù)據(jù)庫驅(qū)動規(guī)范R2DBC,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到蘭山網(wǎng)站設(shè)計(jì)與蘭山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋蘭山地區(qū)。

1. 簡介

R2DBC是一種異步的、非阻塞的關(guān)系式數(shù)據(jù)庫連接規(guī)范。盡管一些NOSQL數(shù)據(jù)庫供應(yīng)商為其數(shù)據(jù)庫提供了反應(yīng)式數(shù)據(jù)庫客戶端,但對于大多數(shù)項(xiàng)目而言,遷移到NoSQL并不是一個理想的選擇。這促使了一個通用的響應(yīng)式關(guān)系數(shù)據(jù)庫連接規(guī)范的誕生。 作為擁有龐大用戶群的關(guān)系式數(shù)據(jù)庫MySQL也有了反應(yīng)式驅(qū)動,不過并不是官方的。但是Spring官方將其納入了依賴池,說明該類庫的質(zhì)量并不低。所以今天就嘗嘗鮮,試一下使用R2DBC連接MySQL。

2. 環(huán)境依賴

基于Spring Boot 2.3.1Spring Data R2DBC,還有反應(yīng)式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必須針對性的配置對應(yīng)的連接工廠接口ConnectionFactory,當(dāng)然也可以通過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")
             
// 額外的其它非必選參數(shù)省略                          
            .build());
}

詳細(xì)配置可參考r2dbc-mysql的官方說明:https://github.com/mirromutth/r2dbc-mysql

當(dāng)ConnectionFactory配置好后,就會被注入DatabaseClient 對象。該對象是非阻塞的,用于執(zhí)行數(shù)據(jù)庫反應(yīng)性客戶端調(diào)用與反應(yīng)流背壓請求。我們可以通過該接口反應(yīng)式地操作數(shù)據(jù)庫。

4. 編寫反應(yīng)式接口

我們先創(chuàng)建一張表并寫入一些數(shù)據(jù):

create table client_user
(
    user_id         
varchar(64)                              not null comment 
'用戶唯一標(biāo)示' primary key,
    username        varchar(64)                              null comment 
'名稱',
    phone_number    varchar(64)                              null comment 
'手機(jī)號',
    gender          tinyint(1) default 
0                     
null comment 
'0 未知 1 男 2 女  '
)

對應(yīng)的實(shí)體為:

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的反應(yīng)式接口:

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

    /**
     
* 響應(yīng)式寫入.
     
*
     
* @return Mono對象包含更新成功的條數(shù)
     
*/
    @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();
    }

}

調(diào)用接口就能獲取到期望的數(shù)據(jù)結(jié)果。

5. 總結(jié)

乍一看R2DBC并沒有想象中的那么難,但是間接的需要了解Flux、Mono等抽象概念。同時目前來說如果不和Webflux框架配合也沒有使用場景。就本文的MySQL而言,R2DBC驅(qū)動還是社區(qū)維護(hù)(不得不說PgSQL就做的很好)。

然而需要你看清的是反應(yīng)式才是未來。如果你要抓住未來就需要現(xiàn)在就了解一些相關(guān)的知識。這讓我想起五年前剛剛接觸Spring Boot的感覺。

上述內(nèi)容就是如何理解反應(yīng)式數(shù)據(jù)庫驅(qū)動規(guī)范R2DBC,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前標(biāo)題:如何理解反應(yīng)式數(shù)據(jù)庫驅(qū)動規(guī)范R2DBC
文章來源:http://weahome.cn/article/jdesci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部