响应式编程库(三) -r2dbc

什么是r2dbc

反应式关系数据库连接(R2DBC)项目为关系数据库带来了反应式编程API。

基于Reactive Streams规范。R2DBC建立在Reactive Streams规范之上,它提供了一个完全反应式的非阻塞API

r2dbc 官网:https://r2dbc.io/
github: r2dbc-mysql 版本
spring-data r2dbc

版本选择

参考下表来确定适合你的项目的r2 dbc-mysql版本。

spring-boot-starter-data-r2dbc spring-data-r2dbc r2dbc-spi r2dbc-mysql(recommended)
3.0.* and above 3.0.* and above 1.0.0.RELEASE io.asyncer:r2dbc-mysql:1.2.0
2.7.* 1.5.* 0.9.1.RELEASE io.asyncer:r2dbc-mysql:0.9.7
2.6.* and below 1.4.* and below 0.8.6.RELEASE dev.miku:r2dbc-mysql:0.8.2

简单试用

        <!-- https://mvnrepository.com/artifact/dev.miku/r2dbc-mysql -->
        <dependency>
            <groupId>dev.miku</groupId>
            <artifactId>r2dbc-mysql</artifactId>
            <version>0.8.2.RELEASE</version>
        </dependency>

 @Test
    void connection() throws IOException {
   
   

        // r2dbc基于全异步、响应式、消息驱动
        // jdbc:mysql://localhost:3306/test
        // r2dbc:mysql://localhost:3306/test

        //0、MySQL配置
        MySqlConnectionConfiguration configuration = MySqlConnectionConfiguration.builder()
                .host("192.168.xx.xx")
                .port(3306)
                .username("root")
                .password("123456")
                .database("test")
                .connectTimeout(Duration.ofSeconds(3))
                .build();

        //1、获取连接工厂
        MySqlConnectionFactory connectionFactory = MySqlConnectionFactory.from(configuration);


        //2、获取到连接,发送sql
        Mono<Connection> connectionMono = Mono.from(connectionFactory.create());

        // JDBC: Statement: 封装sql的
        //3、数据发布者
        connectionMono.flatMapMany(connection ->
                                    connection
//                                    .createStatement("INSERT INTO `t_book` (`publisher`, `author`) VALUES ('who', '1')")
                                    .createStatement("select * from t_book where id=?id and publisher=?")
                                    .bind("id", 1L) //具名参数
                                    .bind(1, "pub")
                                    .execute()
        ).flatMap(result -> {
   
   
			// 不同版本,api有所不一致
            return result.map((readable,book)->{
   
   
                System.out.println("readable:"+readable);
                System.out.println("book:"+book);
                        Long id = readable.get("id", Long.class);
                        String publisher = readable.get("publisher", String.class);
                        Long author = readable.get("author", Long.class);
                        return new 
### Kingbase8 与 R2DBC 集成配置实例教程 #### 创建 Maven 或 Gradle 项目依赖项 为了实现 Kingbase8 数据R2DBC 的集成,首先需要在项目的构建工具中添加必要的依赖。 对于 Maven 用户,在 `pom.xml` 文件中加入如下依赖: ```xml <dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-spi</artifactId> <version>${r2dbc.version}</version> </dependency> <!-- 假设存在适用于 Kingbase8 的驱动 --> <dependency> <groupId>com.kingbase8</groupId> <artifactId>r2dbc-driver</artifactId> <version>${kingbase.driver.version}</version> </dependency> ``` 对于 Gradle 用户,则应在 `build.gradle` 中添加相应的依赖声明: ```groovy implementation 'io.r2dbc:r2dbc-spi' // 使用假设存在的 Kingbase8 R2DBC 驱动版本号替换下面的占位符 implementation 'com.kingbase8:r2dbc-driver:${kingbase.driver.version}' ``` #### Spring Boot 应用程序配置 接下来定义应用程序的主要入口类,并设置数据连接属性。编辑位于资源目录下的 `application.yml` 文件来指定数据源参数: ```yaml spring: r2dbc: url: r2dbcs:kingbase8://localhost:54321/your_database_name?currentSchema=public username: your_username password: your_password ``` 请注意 URL 格式的特殊之处在于前缀应为 `r2dbcs:` 而不是传统的 JDBC 形式,并且端口号需根据实际安装情况调整[^1]。 #### 定义实体和服务层逻辑 按照标准分层架构模式设计应用内部结构,创建所需的 Java 类型以映射表记录并封装业务操作方法。这通常涉及建立领域对象(即 Model)、存储接口(继承自 `org.springframework.data.repository.reactive.ReactiveCrudRepository` 接口),以及具体的服务实现类[^2]。 例如,可以这样定义一个简单的 User 实体及其关联的操作接口: ```java @Table("users") // 如果适用的话,请查阅所使用的 ORM 映射框架文档了解确切注解形式 public class User { @Column("id") private Long id; @Column("name") private String name; // getters and setters... } public interface UserRepository extends ReactiveCrudRepository<User, Long> {} ``` 最后一步是在服务层编写具体的业务流程代码,利用上述仓完成 CRUD 功能开发。由于采用响应式编程范式,因此返回类型多为 Mono<T>/Flux<T>. #### 测试 API 端点功能 当所有准备工作完成后,可以通过 Postman 或其他 RESTful 工具向已部署的应用发送 HTTP 请求来进行验证。确保 `/doc.html` 提供了完整的交互指南以便开发者快速上手.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值