Java 11:JOIN表,獲取Java流
阿新 • • 發佈:2018-12-05
Java 8和JOIN
Speedment允許動態JOIN:ed資料庫表作為標準Java Streams使用。我們首先使用Sakila示例資料庫檢視Java 8的解決方案:
Speedment app = ...;
JoinComponent joinComponent = app。getOrThrow(JoinComponent。類);
加入< Tuple2OfNullables < 語言,電影>> join = joinComponent
。從(LanguageManager。IDENTIFIER)
。innerJoinOn(電影。LANGUAGE_ID)。等於(語言。LANGUAGE_ID)
。build();
加入。流()
。的forEach(系統。出來 :: 的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(aka var
宣告),這使得joins
使用Speedment 編寫更容易 。我們不必顯式宣告連線變數的型別:
Speedment app = ...;
JoinComponent joinComponent = app。getOrThrow(JoinComponent。類);
var join = joinComponent
。從(LanguageManager。IDENTIFIER)
。innerJoinOn(電影。LANGUAGE_ID)。等於(語言。LANGUAGE_ID)
。build();
加入。流()
。的forEach(系統。出來 :: 的println);
程式碼細分
該from()
方法採用我們想要使用的第一個表(Language
)。該innerJoinOn()
方法採用我們想要加入的第二個表的特定列。然後,該equal()
方法從我們想要用作連線條件的第一個表中獲取一列。所以,在這個例子中,我們將得到匹配Language
和Film
實體在列Film.LANGUAGE_ID
相等Language.LANGUAGE_ID
。
最後,build()
將構造我們的Join
物件,反過來,它可以用於建立Java Streams。該Join
物件可以一遍又一遍地重複使用。
加入型別和條件
我們可以使用innerJoinOn()leftJoinOn()
,rightJoinOn()
以及 crossJoin()
和表格可以使用條件×××equal()
,notEqual()
,lessThan()
,lessOrEqual()
,greaterThan()
,和lessOrEqual()
。