您是否知道可以使用Java 14的预览记录功能将数据库表连接到Java Stream中? 阅读这篇简短的文章,并了解如何使用Speedment Stream ORM完成它。 我们将从如何设置您的项目开始。
设定
下载Java 14 。 转到Speedment Initializer并下载您的项目骨架(包括pom.xml
)。 修改您的以下行
pom.xml
文件:
< maven.compiler.source >14</ maven.compiler.source > < maven.compiler.target >14</ maven.compiler.target > ... < plugin > < artifactId >maven-compiler-plugin</ artifactId > < version >3.8.1</ version > < configuration > < release >14</ release > < compilerArgs > --enable-preview </ compilerArgs > </ configuration > </ plugin >
确保您拥有支持新Java 14功能的最新版本的ide(例如IDEA 2010.1)。
加速加入
速度允许将动态JOIN:ed数据库表作为标准Java流使用。 在本文中,我们将使用示例性的Sakila数据库,其中包含电影,演员,语言等。下载Sakila
这里还是抢泊坞版本在这里 。
借助Speedment,可以轻松地将表,视图和联接转换为标准Java流。 这就是在Java 14中的样子:
var speedment = new SakilaApplicationBuilder() .withPassword( "sakila" ) .withBundle(JoinBundle. class ) .build(); var joinComponent = speedment.getOrThrow(JoinComponent. class ); var films = speedment.getOrThrow(FilmManager. class ); // Define a Java 14 "record" that can hold a Film and a Language record FilmLanguage(Film film, Language language) {} var join = joinComponent.from(films.getTableIdentifier()) .leftJoinOn(Language.LANGUAGE_ID).equal(Film.LANGUAGE_ID) // Provide the constructor of the Java 14 "record" // to be used to construct Film/Language composites .build(FilmLanguage:: new ); join.stream() .forEach(filmLanguage -> System.out.format( "%s is in %s%n" , filmLanguage.film().getTitle(), filmLanguage.language().getName()) );
这将产生以下输出:
ACADEMY DINOSAUR is in English ACE GOLDFINGER is in English ADAPTATION HOLES is in English ...
代码分解
from()
方法获取我们要使用的第一个表( Film
)。 的
innerJoinOn()
方法采用我们要连接的第二张表的特定列。 然后, equal()
方法从我们要用作连接条件的第一个表中获取一列。 因此,在此示例中,我们将获得匹配的Film
和Language
实体,其中Language.LANGUAGE_ID
列等于Film.LANGUAGE_ID
。
最后, build()
将构造我们的Join
对象,该对象又可以用于创建Java Streams。 Join
对象可以反复使用。
请注意, record FilmLanguage
的构造函数是如何在
build()
方法。 还请注意如何从记录中获取电影和语言实体(例如filmLanguage.film()
)。 与以前的Java版本相比,这是一个很大的改进,在Java版本中,我们不得不提供较长的自定义类,或者使用具有访问器的元组get0()
如get0()
和get0()
get1()
而不是更具描述性的film()
和language()
JOIN的类型和条件
我们可以使用innerJoinOn()
leftJoinOn()
rightJoinOn()
和crossJoin()
和表可以使用的条件被接合equal()
notEqual()
lessThan()
lessOrEqual()
greaterThan()
和lessOrEqual()
下一步是什么?
在此处下载开源Java 14。
在此处下载Speedment。
阅读Speedment用户指南中有关JOIN功能的所有内容。
翻译自: https://www.javacodegeeks.com/2020/02/java14-join-database-tables-with-java-14s-new-record.html