java联接pg库
您是否知道可以使用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版本,我们必须提供相当长的自定义类或使用元组就像访问一个很大的进步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
java联接pg库