博客
关于我
Spring Data R2DBC响应式操作MySQL
阅读量:424 次
发布时间:2019-03-06

本文共 3206 字,大约阅读时间需要 10 分钟。

Spring Data R2DBC 实践指南

前言

在之前的文章中,我初步介绍了使用 r2dbc-mysql 的经验。然而,直接通过 DatabaseClient 操作 MySQL 可能过于底层,不利于开发。今天,我将结合 Spring Data R2DBC,演示其与 Spring Data Repository 风格的数据库操作特性。

注意事项:目前 Spring Data R2DBC 尽管已经迭代了多个正式版本,但仍处于初级阶段,尚不足以用于生产环境。然而,未来值得关注和研究。

Spring Data R2DBC 简介

Spring Data R2DBC 提供了基于反应式关系数据库驱动程序的 Repository 抽象。它并非传统的 ORM框架,不提供缓存、懒加载等特性,但其抽象了数据库与对象的映射关系,具有轻量级和易用性的特点。它可以视为 R2DBC 的客户端程序,用于抽象数据库操作。

版本对应关系

以下是 Spring Data R2DBCSpring Framework 的版本对应关系:

Spring Data R2DBC Spring Framework
1.0.0.RELEASE 5.2.2.RELEASE
1.1.0.RELEASE 5.2.6.RELEASE
1.1.1.RELEASE 5.2.7.RELEASE
1.1.2.RELEASE 5.2.8.RELEASE

确保版本兼容性,避免不兼容问题。

依赖管理

本项目依赖以下库:

org.springframework.boot
spring-boot-starter-data-r2dbc
io.r2dbc
r2dbc-pool
dev.miku
r2dbc-mysql
org.springframework.boot
spring-boot-starter-data-jdbc
org.springframework.boot
spring-boot-starter-webflux

本项目使用 Spring Boot 2.3.2.RELEASE

数据库配置

采用 application.yaml 配置 R2DBC 参数:

spring:    r2dbc:        url: r2dbcs:mysql://127.0.0.1:3306/r2dbc        username: root        password: 123456

spring.r2dbc.url 格式需根据数据库驱动调整,连接池使用默认配置即可。

业务逻辑编写

数据库实体声明

定义数据库实体类:

@Data@Tablepublic class ClientUser implements Serializable {    private static final long serialVersionUID = -558043294043707772L;    @Id    private String userId;    private String nickName;    private String phoneNumber;    private Integer gender;}

CRUD 接口声明

定义 CRUD 接口:

public interface ReactiveClientUserSortingRepository extends ReactiveSortingRepository
{}

数据库操作

尝试使用 DatabaseClient 执行 DDL 语句创建表:

@AutowiredDatabaseClient databaseClient;@Testvoid doDDL() {    List
ddl = Collections.unmodifiableList( Arrays.asList( "drop table if exists client_user;", "create table client_user (" + "user_id varchar(64) not null primary key," + "nick_name varchar(32)," + "phone_number varchar(16)," + "gender tinyint default 0" + ") charset = utf8mb4;" ) ); Mono
operation = databaseClient .execute(ddl) .fetch() .rowsUpdated() .as(StepVerifier::create) .expectNextCount(1) .verifyComplete();}

新数据插入

由于 R2DBC 无法直接使用传统的插入方式,我们使用自定义查询:

@Modifying@Query("insert into client_user (" +    "user_id,nick_name,phone_number,gender" +    ") values (:userId,:nickName,:phoneNumber,:gender)")Mono
addClientUser( String userId, String nickName, String phoneNumber, Integer gender);

Webflux 集成

创建 Webflux 接口:

@RestControllerMapping("/user")public class ReactiveClientUserController {    @Autowired    private ReactiveClientUserSortingRepository reactiveClientUserSortingRepository;    @GetMapping("/{userId}")    public Mono
findUserById(@PathVariable String userId) { return reactiveClientUserSortingRepository.findById(userId); }}

测试数据参考

在低并发环境下,Spring MVC + JDBC 最为稳定。然而,在高并发场景下,WebFlux + R2DBC 提供了更优的性能表现。

总结

今天对 Spring Data R2DBC 进行了深入演示。尽管其仍处于初级阶段,但社区活跃,未来发展潜力巨大。希望本文能为您带来帮助。

关注公众号:Felordcn 获取更多技术资讯。

转载地址:http://eajuz.baihongyu.com/

你可能感兴趣的文章
OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
查看>>
OAuth2 Provider 项目常见问题解决方案
查看>>
OAuth2 vs JWT,到底怎么选?
查看>>
Vue.js 学习总结(14)—— Vue3 为什么推荐使用 ref 而不是 reactive
查看>>
oauth2-shiro 添加 redis 实现版本
查看>>
OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
查看>>
OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
查看>>
OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
查看>>
OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
查看>>
OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
查看>>
OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
查看>>
OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
查看>>
OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
查看>>
OAuth2.0_授权服务配置_授权码模式_Spring Security OAuth2.0认证授权---springcloud工作笔记144
查看>>
OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
查看>>
OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
查看>>
OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
查看>>
oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
查看>>
OAuth2.0四种模式的详解
查看>>
OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
查看>>