Java14:使用Java 14的新记录联接数据库表

您是否知道可以使用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()方法从我们要用作连接条件的第一个表中获取一列。 因此,在此示例中,我们将获得匹配的FilmLanguage实体,其中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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值