本周六,「源创会年终盛典」珠海站再次回归!错过等一年
一、前言
随着 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 可以完成数据库的响应式操作,也有更好的透明性,使用简单和直接。
还没有评论,来说两句吧...