Когда-нибудь задумывались, как можно превратить объединенные таблицы базы данных в поток 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, являются их собственными. |