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 H2)
CREATE TABLE `user` (
`id` bigint(20) not null,
`name` varchar(255) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
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 可以完成数据库的响应式操作,也有更好的透明性,使用简单和直接。
RxSqlUtils(base R2dbc)的更多相关文章
- 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,
封装常用的js(Base.js)——[01]理解库,获取节点,连缀, youjobit07 2014-10-10 15:32:59 前言: 现如今有太多优秀的开源javascript库, ...
- javascript重置(base层)(。。。。不完整)
1.nextSibling浏览器兼容问题 <ul> <li id="item1"></li> <li id="item2&quo ...
- 继承与构造函数(base关键字)
1.背景 我:虽然通过继承减少了代码冗余,但是,每一个子类的构造函数还是需要给所有属性赋值的,很麻烦的. 师:这个好办,用base就行啦. 我:贝司?还吉他呢! 师:别急,首先我们先介绍下实例化子类对 ...
- TensorFlow windows 安装(base anaconda)
Python conda安装之后(19年默认是python3.7) 1.降级到python3.6 2.查看python版本 3.安装tensorflow
- Ubuntu编译Protobuf(Base tensorflow-12)报错
报错1: dogepool@ubuntu-server:~/dogecoin$ ./autogen.sh./autogen.sh: 50: ./autogen.sh: autoreconf: not ...
- Java 编程入门(词汇表)
抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...
- CPU与内存(经典问答)
原文:http://www.cnblogs.com/xkfz007/archive/2012/10/08/2715163.html 下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如 ...
- Flink资料(1)-- Flink基础概念(Basic Concept)
Flink基础概念 本文描述Flink的基础概念,翻译自https://ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/con ...
- centos7安装docker并安装jdk和tomcat(常用命令)
阿里专属的镜像加速 在宿主机器编辑文件:vi /etc/docker/daemon.json 阿里专属的镜像加速地址,类似于"https://91cntlkt.mirror.aliyuncs ...
- Java编程入门(词汇表)
抽象类(abstract class):抽象类不能创建对象,主要用来创建子类.Java中的抽象类使用 abstract 修饰符定义. 抽象数据类型(abstract data type ADT):抽象 ...
随机推荐
- Module Warning (from ./node_modules/postcss-loader/dist/cjs.js): Warning
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- KubeSphere Helm 应用仓库源码分析
作者:蔡锡生,LStack 平台研发工程师,近期专注于基于 OAM 的应用托管平台落地. 背景介绍 KubeSphere 应用商店简介 作为一个开源的.以应用为中心的容器平台,KubeSphere 在 ...
- 160. 相交链表 Golang实现
题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表不存在相交节点,返回 null . 注意这里的相交节点表示的是值和物理位置都相同的 ...
- keycloak~token配置相关说明
会话有效期 在 Keycloak 中,"SSO Session Idle" 和 "SSO Session Max" 是用于配置单点登录(SSO)会话的两个参数. ...
- java的split方法的转义字符
一.实例 我们都知道 String s="ad,dfjdlfs,df,s,dfl"; 执行 String re[]=s.split(","); 则re ...
- 关闭火狐Firefox下载提示弹窗
关闭火狐 Firefox 下载提示弹窗可以通过地址栏输入about:config,打开高级首选项,搜索:browser.download.alwaysOpenPanel将true改为false即可关闭 ...
- RTCP报文解析
RTCP包的头部结构体定义 struct RTCP_Header { unsigned short rc:5; unsigned short padding:1; unsigned short ver ...
- 强化学习:塑造奖励(Shaping reward)
"塑造奖励"(Shaping reward)是一个主要用于行为心理学和强化学习领域的技术.它通过对目标行为或结果的逐步接近进行强化,逐渐通过奖励越来越接近目标的行为来"塑 ...
- 鸿蒙NEXT开发案例:光强仪
[引言] 本文将介绍如何使用鸿蒙NEXT框架开发一个简单的光强仪应用,该应用能够实时监测环境光强度,并给出相应的场景描述和活动建议. [环境准备] 电脑系统:windows 10 开发工具:DevEc ...
- P4229 某位歌姬的故事
P4229 某位歌姬的故事 处理复杂点的 dp 题. 思路 先考虑 \(n\) 比较小的情况,把每个询问放到线段上,发现每个格子只能满足覆盖最小的限制,于是考虑将询问有效区间排序考虑. 设 \(f[i ...