当前位置: 首页 > article >正文

RxSqlUtils(base R2dbc)

一、前言

随着 Solon 3.0 和 Solon-Rx 3.0 发布,又迎来了的 RxSqlUtils 扩展插件,用于“响应式”操作数据库。RxSqlUtils 是基于 R2dbc 和 Reactor 接口的封装。极简风格,就像个工具类,故名:RxSqlUtils。

尤其在 solon-web-rx 和 Solon Cloud Gateway(基于纯响应式构建) 场景开发时,RxSqlUtils 会是最好的良配。

二、RxSqlUtils 使用

1、引入依赖
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-data-rx-sqlutils</artifactId>
</dependency>
2、新建数据库表(for MySql)
CREATE TABLE `user`  (
  `id` bigint(20) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
3、定义实体类

使用了 lombok 的注解。

@Data
public class User {
    private Long id;
    private String name;
    private String title;
}
4、添加数据源配置
solon.dataSources:
  user!: # ‘!’结尾表示默认数据源
    class: "org.noear.solon.data.datasource.R2dbcConnectionFactory"
    r2dbcUrl: "r2dbc:h2:mem:///test;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL;DATABASE_TO_LOWER=TRUE;IGNORECASE=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE"
5、注入 RxSqlUtils 并使用

注入(这样就可以用了)

@Component
public class UserDao {
    @Inject
    private RxSqlUtils sqlUtils;
}

查询操作

public Flux<User> getAllUsers() {
    return sqlUtils.sql("select * from user")
                   .queryRowList(User.class);
}

新增操作

public Mono<Long> addUser(User user) {
    return sqlUtils.sql("INSERT INTO user (name , title) VALUES (?,?)", user.getName(), user.getTitle())
                   .updateReturnKey(Long.class);
}

更新操作

public Mono<Long> updateUser(User user) {
    return sqlUtils.sql("UPDATE user SET name=?, title=? WHERE id=?", user.getName(), user.getTitle(), user.getId())
                   .update();
}

总结

使用 RxSqlUtils 可以完成数据库的响应式操作,也有更好的透明性,使用简单和直接。


http://www.kler.cn/a/457747.html

相关文章:

  • 【本地Docker部署PDFMathTranslate文档翻译服务并实现远程使用教程】
  • 机器学习DAY7: 特征工程和特征选择(数据预处理)(完)
  • 磁环的选型【EMC】
  • 【Python】邮箱登录验证码功能实现
  • 虚拟机网络配置
  • 基于SpringBoot的校园周边美食探索及分享平台的设计与实现
  • ArcGIS中怎么进行水文分析?(思路介绍)
  • Three.js 字体
  • 关于JAVA方法值传递问题
  • 基于Python的智能停车场管理系统
  • 深入解析 Python 函数的返回值
  • 嵌入式系统 第十三讲 网络设备驱动程序开发
  • 自动驾驶3D目标检测综述(六)
  • Qt仿音乐播放器:绘画、图片
  • 43243242342
  • 本机实现Llama 7B推理及部署
  • Flume其二,自定义拦截器、选择器、自动容灾、负载均衡
  • 回顾2024加密市场的“得与失”,2025路在何方?
  • HTML 元素:网页构建的基础
  • Lecture 17