是否曾经想过如何将联接的数据库表转换为Java Stream? 阅读这篇简短的文章,并了解如何使用Speedment Stream ORM完成它。 我们将从Java 8示例开始,然后研究Java 11的改进。

Java 8和JOIN

速度允许将动态JOIN:ed数据库表作为标准Java流使用。 我们首先来看一个使用Sakila示例数据库的Java 8解决方案:

Speedment app = ...;JoinComponent joinComponent = app.getOrThrow(JoinComponent.class);Join<Tuple2OfNullables<Language, Film>> join = joinComponent.from(LanguageManager.IDENTIFIER).innerJoinOn(Film.LANGUAGE_ID).equal(Language.LANGUAGE_ID).build();join.stream().forEach(System.out::println);

这将产生以下输出(经过重新格式化并缩短了可读性):

Tuple2OfNullablesImpl {LanguageImpl { languageId = 1, name = English, ... }, FilmImpl { filmId = 1, title = ACADEMY DINOSAUR, ... }
}
Tuple2OfNullablesImpl {LanguageImpl { languageId = 1, name = English, ... }, FilmImpl { filmId = 2, title = ACE GOLDFINGER, ... }
}
Tuple2OfNullablesImpl {LanguageImpl { languageId = 1, name = English, ... },FilmImpl { filmId = 3, title = ADAPTATION HOLES, ... }
}
...

Java 11和JOIN

在新的Java版本11中,存在Local-Variable-Type-Inference(又称var声明),这使得使用Speedment编写联接更加容易。 我们不必显式声明join变量的类型:

Speedment app = ...;JoinComponent joinComponent = app.getOrThrow(JoinComponent.class);var join = joinComponent.from(LanguageManager.IDENTIFIER).innerJoinOn(Film.LANGUAGE_ID).equal(Language.LANGUAGE_ID).build();join.stream().forEach(System.out::println);

代码分解

from()方法获取我们要使用的第一个表( Language )。 innerJoinOn()方法采用我们要连接的第二张表的特定列。 然后, equal()方法从我们要用作连接条件的第一个表中获取一列。 因此,在此示例中,我们将获得匹配的LanguageFilm实体,其中Film.LANGUAGE_ID列等于Language.LANGUAGE_ID

最后, build()将构造我们的Join对象,该对象又可以用于创建Java Streams。 Join对象可以反复使用。

JOIN的类型和条件

我们可以使用innerJoinOn() leftJoinOn() rightJoinOn()crossJoin()和表可以使用的条件被接合equal() notEqual() lessThan() lessOrEqual() greaterThan()lessOrEqual()

下一步是什么?

在此处下载开源Java 11。

在此处下载Speedment。

阅读Speedment用户指南中有关JOIN功能的所有内容。

翻译自: https://www.javacodegeeks.com/2018/12/java-11-join-tables-java-streams.html

Java 11:JOIN表,获取Java流相关推荐

  1. IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

    文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...

  2. java jquery_jQuery数据表和Java集成

    java jquery jQuery DataTables是一个开放源代码插件,用于在浏览器中创建表. 它具有许多功能,例如排序,服务器端处理, JQUERY UI主题滚动. 该插件的下载链接: ht ...

  3. java 线程转储_获取Java线程转储的常用方法(推荐)

    1. 线程转储简介 线程转储(Thread Dump)就是JVM中所有线程状态信息的一次快照. 线程转储一般使用文本格式, 可以将其保存到文本文件中, 然后人工查看和分析, 或者使用工具/API自动分 ...

  4. 基于java图书馆借阅管理系统获取(java毕业设计)

    基于java图书馆借阅管理系统 图书馆借阅管理系统是基于java编程语言和mysql数据库设计,本系统分为读者用户和管理员两个角色,其中用户可以注册后登陆系统,查看图书信息,在线借阅图书,查看借阅历史 ...

  5. Java 文件路劲获取(流的方式),适用与jar包或war包运行方式

    读取文件使用流的方式在基本的场合都不会发生错误! 以下是读取文件的几种方式: public static void main(String[] args) {//获取classpath路径,就是根目录 ...

  6. java通过注册表获取wps版本_注册表检测office版本

    #region 查询注册表,判断本机是否安装Office2003,2007和WPS public int ExistsRegedit() { int ifused = 0; RegistryKey r ...

  7. java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...

    此问题包含多个不同的问题. 首先,我们需要获取工作表的数据验证,然后为每个数据验证获取数据验证所适用的Excel单元格范围. 如果该单元格位于该单元格范围之一中,并且数据验证是列表约束,则进行进一步处 ...

  8. java刷新透视表数据源,Java 创建、刷新Excel透视表/设置透视表行折叠、展开

    Java 创建.刷新Excel透视表/设置透视表行折叠.展开 透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表.本文以创建透视表.刷新透视表以及设置透视表的 ...

  9. java系统时间怎么获取,java目前系统时间的获取

    java当前系统时间的获取 import   java.text.SimpleDateFormat; SimpleDateFormat   formatter   =   new   SimpleDa ...

  10. java methods infoxa_如何获取Java 8方法参考的MethodInfo?

    请看下面的代码: Method methodInfo = MyClass.class.getMethod("myMethod"); 此方法有效,但是方法名称作为字符串传递,因此即使 ...

最新文章

  1. 四百元值不值——论小米2A与2S
  2. python3 字符串居中对齐
  3. @PostConstruct注解学习
  4. python关机linux_Python学习第157课——Linux切换用户、关机、查看正在运行的程序...
  5. java结构设计_Java基本的程序设计结构(一)
  6. 安全使用网上银行 享受在线购物时尚生活
  7. html语言机标记椒用来调字体的,HTML语言 之 字体标记
  8. android+动画+锯齿,Android_rotate--animation 动画旋转两图片,消除动画锯齿现象 android 开发:动画旋转两图片 - 下载 - 搜珍网...
  9. mysql一个表中多个字段对应另一个表的id如何查询?
  10. 加密芯片——RSA算法特点与应用注意事项
  11. 创建 VSTO 工作簿的windows安装包
  12. 刷脸支付打造了一个无卡交易的时代
  13. win10系统以太网连接显示“未识别网络”问题的解决
  14. macbook卡在进度条开不了机_Mac 开机停在进度条解决方法
  15. 独立于计算机系统的是 用户模式,2019年12月网络教育统考《计算机应用基础》复习题(十三)...
  16. 基于Python实现对房价的预测
  17. 微信手环1年多了,前主管终于出来聊了聊它是怎么诞生的
  18. C语言----排班系统
  19. 火狐标签在中间_在Firefox中轻松组织和分组标签
  20. 列合并:两列 或 多列 合并为 一列

热门文章

  1. [ZJOI2005]午餐(贪心+dp)
  2. BZOJ1485: [HNOI2009]有趣的数列
  3. Network of Schools POJ - 1236 tarjan强连通分量缩点
  4. 动态规划训练9 [Brackets POJ - 2955 ]
  5. 3、数据库中的字符集和校对集
  6. 41、java应用占用cpu过高原因分析
  7. Maven的pom.xml文件详解------Build Settings
  8. 你必须掌握的 21 个 Java 核心技术
  9. 这也许是你不曾留意过的 Mybatis 细节
  10. Spring @Autowired 注释