Когда-нибудь задумывались, как можно превратить объединенные таблицы базы данных в поток Java? Прочтите эту короткую статью и узнайте, как это делается с помощью ORM Speedment Stream . Мы начнем с примера Java 8, а затем рассмотрим улучшения с Java 11.
Java 8 и JOIN
Ускорение позволяет динамически присоединяться к таблицам базы данных JOIN: ed в качестве стандартных потоков Java. Мы начнем с рассмотрения решения для Java 8 с использованием примерной базы данных Sakila:
01
02
03
04
05
06
07
08
09
10
11
|
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); |
Это даст следующий вывод (переформатированный и сокращенный для удобства чтения):
01
02
03
04
05
06
07
08
09
10
11
12
13
|
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. Нам не нужно явно указывать тип переменной соединения:
01
02
03
04
05
06
07
08
09
10
11
|
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()
берет столбец из первой таблицы, который мы хотим использовать в качестве условия соединения. Итак, в этом примере мы получим соответствующие объекты Language
и Film
которых столбец Film.LANGUAGE_ID
равен Language.LANGUAGE_ID
.
Наконец, build()
создаст наш объект Join
который, в свою очередь, может быть использован для создания потоков Java. Объект Join
можно использовать снова и снова.
РЕЙТИНГ Типы и условия
Мы можем использовать innerJoinOn()
leftJoinOn()
, rightJoinOn()
и crossJoin()
а таблицы можно crossJoin()
с использованием условий equal()
, notEqual()
, lessThan()
, lessOrEqual()
, greaterThan()
и lessOrEqual()
.
Что дальше?
Загрузите Java 11 с открытым исходным кодом здесь .
Скачать Speedment здесь .
Прочитайте все о функциональности JOIN в Руководстве пользователя Speedment .
Смотрите оригинальную статью здесь: Java 11: JOIN Tables, Get Java Streams
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |