文章背景

  • 消除回调地狱
  • 先查询学生(包含学校的Id),然后使用学校的ID,去学校表查询学校的详细信息

1. DbVerticle.java

import com.xiaoniu.db.entity.User;
import com.xiaoniu.db.utils.Utils;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.asyncsql.MySQLClient;
import io.vertx.ext.sql.SQLClient;
import io.vertx.ext.sql.SQLConnection;
import io.vertx.ext.sql.SQLRowStream;import java.util.ArrayList;
import java.util.List;/*** Created by sweet on 2017/9/13.*/
public class DbVerticle extends AbstractVerticle {private String sql = "SELECT id, name FROM t_school WHERE id IN (";private SQLClient sqlClient;public static void main(String[] args) {Runner.runExample(DbVerticle.class);}@Overridepublic void start(Future<Void> startFuture) throws Exception {JsonObject c = new JsonObject();c.put("username", "root").put("password", "main").put("host","127.0.0.1").put("database", "sqldemo2");sqlClient = MySQLClient.createShared(vertx, c);Future<SQLConnection> sqlConnectionFuture = Future.future();sqlClient.getConnection(sqlConnectionFuture);sqlConnectionFuture.setHandler(connection -> {if (connection.succeeded()) {SQLConnection conn = connection.result();Future<SQLRowStream> streamFuture1 = Future.future();Future<List<User>> streamFuture2 = Future.future();Future<List<JsonArray>> future = Future.future();conn.queryStream("SELECT id, name, t_school_id FROM t_user", streamFuture1);streamFuture1.compose(sqlRowStream -> {List<User> users = new ArrayList<>();sqlRowStream.handler(jsonArray -> {System.out.println(jsonArray);users.add(new User(jsonArray));});System.out.println("user size: " + users.size());streamFuture2.complete(users);}, streamFuture2).compose(users -> {List<JsonArray> list = new ArrayList<>();JsonArray collect = users.parallelStream().map(User::getSchoolId).collect(JsonArray::new, JsonArray::add, JsonArray::addAll);String sql2 = sql += Utils.placeholder("?", collect.size(), ", ") + ")";conn.queryStreamWithParams(sql2, collect, schoolResult -> {if (schoolResult.failed()){schoolResult.cause().printStackTrace();return;}schoolResult.result().handler(jsonArray1 -> {if (jsonArray1 != null && jsonArray1.size() > 0)list.add(jsonArray1);});future.complete(list);});}, future);future.setHandler(list -> {conn.close(); // 关闭流if (list.failed()) {list.cause().printStackTrace();return;}System.out.println("-----");list.result().forEach(System.out::println);});} else {connection.cause().printStackTrace();System.err.println(connection.cause().getMessage());}});startFuture.complete();}
}
复制代码

2. Utils.java

public class Utils {public static void main(String[] args) {System.out.println(placeholder("?", 5, ","));}private Utils(){}/*** 生成占位符* (?, 5, ",")* ?,?,?,?,?* @param symbol ?* @param count  出现个数* @param delimiter 分割符* @return*/public static String placeholder(String symbol, Integer count, String delimiter) {String[] s = new String[count];for (int i = 0; i < count; i++) {s[i] = symbol;}return String.join(delimiter, s);}
}
复制代码

3. User.java

public class User {private String id;private String name;private String schoolId;public User() {}public User(String id, String name) {this.id = id;this.name = name;}public User(JsonArray jsonArray) {this.id = jsonArray.getString(0);this.name = jsonArray.getString(1);this.schoolId = jsonArray.getString(2);}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +", name='" + name + '\'' +", schoolId='" + schoolId + '\'' +'}';}
// ....
}
复制代码

4. pom.xml

    <dependencies><dependency><groupId>io.vertx</groupId><artifactId>vertx-core</artifactId><version>3.4.2</version></dependency><dependency><groupId>io.vertx</groupId><artifactId>vertx-mysql-postgresql-client</artifactId><version>3.4.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>slf4j-impl</artifactId><version>RELEASE</version></dependency></dependencies>
复制代码

5. Runner.java

这个文件是官方提供的 方便在 IDE中运行的类,https://github.com/vert-x3/vertx-examples/blob/master/core-examples/src/main/java/io/vertx/example/util/Runner.java。

Vert.x MySQLClient体验相关推荐

  1. Vert.x(vertx) 简明介绍

    摘要 Vert.x最大的特点就在于异步(底层基于Netty),通过事件循环(EventLoop)来调起存储在异步任务队列(CallBackQueue)中的任务,大大降低了传统阻塞模型中线程对于操作系统 ...

  2. 【CSDN软件工程师能力认证学习精选】 Vert.x(vertx) 简明介绍

    CSDN软件工程师能力认证(以下简称C系列认证)是由中国软件开发者网CSDN制定并推出的一个能力认证标准.C系列认证历经近一年的实际线下调研.考察.迭代.测试,并梳理出软件工程师开发过程中所需的各项技 ...

  3. 27Vert.X框架学习笔记

    vert.x框架学习笔记 文章目录 1 Vert.x简明介绍 1.1 Vert.x能干什么 1.2 Vert.x快速体验 1.3 Vert.x的简单介绍 1.4 Vert.x的一些优势 1.4.1 异 ...

  4. Vert.X高并发、多线程框架的使用体验(一)

    ​ 参考中文文档:https://www.wenjiangs.com/doc/ml2vlk2ch 中文文档其实很长,本来想主要介绍一下,后来发现精简不了,还是得一一道来. 怎样正确理解Vert.x机制 ...

  5. java vertx http_佛系学习Vert.x之创建你的HttpServer

    大噶好,最近关注了一个叫Vert.x的东西 这是一个Logo 简单的说这是一个事件驱动的NIO框架,底层基于Netty.(这里我要上个测评)在 Web框架性能测试Round16中的各项指标表现还是很不 ...

  6. io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...

    io.realm:rea 如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着要处理异步性,尤其是当应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的语言,它固有地支持 ...

  7. 使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述

    如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着处理异步性,尤其是当这些应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的支持命令式编程风格的面向对象语言,因此异步 ...

  8. 基于智能家居场景的POALRDB性能体验

    Polardb 是阿里云研发的一种关系型数据库,与mysql完全兼容,而性能又是其6倍,具有高吞吐,低延迟等特性: 本测试通过模拟控制智能家居开关的终端场景,来体验polardb的性能: 1.环境搭建 ...

  9. Vert.x实战 异步数据和事件流

    本章包括: 为什么流[streams]是事件[eventing]之上的一个有用的抽象 什么是背压[back-pressure],为什么它是异步生产者和消费者的基础 如何从流[streams]中解析协议 ...

最新文章

  1. 个人开发者帐号+wireless install 实现非app store程序的在线更新功能
  2. ⒈Altiris cms 7.0 安装前准备工作
  3. 详细介绍Java和C++区别
  4. 紫金农商银行java面试_【应届本科生求职】我的南京紫金农商行面试之路
  5. java 登录牵手_Java: HttpURLConnection 模拟登录方法 (带cookie 的Post/Get)_20160908_七侠镇莫尛貝...
  6. $arr[]=$v 把 $v 这个东西 放到 $arr[] 这个数组中
  7. 【音视频安卓开发 (零)】用 Android NDK 编译 FFmpeg 与 X264
  8. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
  9. 超融合-Nutanix公司的业务模式
  10. ALOS_PALSAR_12.5m分辨率DEM数据下载
  11. iOS 蓝牙开发中数据收发的坑
  12. NRF52832 SPI 资料收集
  13. DTI数据处理: from scanner to statistics
  14. Android 应用(5)——android10.0升级webview浏览器内核版本
  15. 香港为区块链专业人士降低移民门槛
  16. IE浏览器下载文件名出现中文乱码问题解决
  17. 软件中国2006风云榜之10大最具创新性技术
  18. numba : python complier for cuda
  19. matlab一直系统函数画脉冲响应,Matlab 相关分析法求系统脉冲响应(三)
  20. WordPress主机和共享虚拟主机不同在哪?

热门文章

  1. 初中毕业学计算机在哪学,初中毕业要学计算机要去哪个里学呢
  2. bzoj 5302: [Haoi2018]奇怪的背包
  3. truncate delete 与 drop的区别
  4. [转载] 深入理解Linux修改hostname
  5. 两个月学习Python的胡言乱语
  6. ExtJS监听键盘事件:回车键实现登录功能
  7. [轉]VS2010 UML类图生成代码
  8. DataGrid的多行提交
  9. Java常见OutOfMemoryError
  10. php中echo有哪些,php中echo和print有什么区别