本文共 3206 字,大约阅读时间需要 10 分钟。
在之前的文章中,我初步介绍了使用 r2dbc-mysql 的经验。然而,直接通过 DatabaseClient 操作 MySQL 可能过于底层,不利于开发。今天,我将结合 Spring Data R2DBC,演示其与 Spring Data Repository 风格的数据库操作特性。
注意事项:目前 Spring Data R2DBC 尽管已经迭代了多个正式版本,但仍处于初级阶段,尚不足以用于生产环境。然而,未来值得关注和研究。
Spring Data R2DBC 提供了基于反应式关系数据库驱动程序的 Repository 抽象。它并非传统的 ORM框架,不提供缓存、懒加载等特性,但其抽象了数据库与对象的映射关系,具有轻量级和易用性的特点。它可以视为 R2DBC 的客户端程序,用于抽象数据库操作。
以下是 Spring Data R2DBC 与 Spring 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 接口:
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 接口:
@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/