博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vert.x MySQLClient体验
阅读量:7209 次
发布时间:2019-06-29

本文共 4585 字,大约阅读时间需要 15 分钟。

文章背景

  • 消除回调地狱
  • 先查询学生(包含学校的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);  }  @Override  public void start(Future
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
sqlConnectionFuture = Future.future(); sqlClient.getConnection(sqlConnectionFuture); sqlConnectionFuture.setHandler(connection -> { if (connection.succeeded()) { SQLConnection conn = connection.result(); Future
streamFuture1 = Future.future(); Future
> streamFuture2 = Future.future(); Future
> future = Future.future(); conn.queryStream("SELECT id, name, t_school_id FROM t_user", streamFuture1); streamFuture1.compose(sqlRowStream -> { List
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
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);  }  @Override  public String toString() {    return "User{" +            "id='" + id + '\'' +            ", name='" + name + '\'' +            ", schoolId='" + schoolId + '\'' +            '}';  }// ....}复制代码

4. pom.xml

io.vertx
vertx-core
3.4.2
io.vertx
vertx-mysql-postgresql-client
3.4.2
org.slf4j
slf4j-api
1.7.25
org.apache.logging.log4j
slf4j-impl
RELEASE
复制代码

5. Runner.java

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

转载地址:http://gzgum.baihongyu.com/

你可能感兴趣的文章
NSTimer_Block封装定时器的target-action成Block回调
查看>>
FileInfo类和DirectoryInfo类
查看>>
B. Obtaining the String(模拟)
查看>>
[原]浅谈vue过渡动画,简单易懂
查看>>
10.Vue请求远端数据库
查看>>
js -- sort() 使用排序函数
查看>>
时间你懂的,
查看>>
今天 周日,
查看>>
mysql-5.7.21-winx64安装过程(整了好久原因是没关闭防火墙)
查看>>
vi编辑器
查看>>
《JAVA NIO》第一章 简介
查看>>
有继承关系的对象执行顺序,包括静态变量,静态代码块,普通变量,普通代码块,继承方法....
查看>>
使用ownCloud在Linux安装你的个人云服务
查看>>
关键字&关键字工具&网页分析
查看>>
兼容 yu 比较
查看>>
[Android Pro] Android TypedValue.applyDimension()的用法
查看>>
MySql笔记
查看>>
Odoo 二次开发教程(三)-第一个Model及Form、Tree视图
查看>>
Entity Framework Core 1.1 升级通告
查看>>
MySQL:procedure, function, cursor,handler
查看>>