Статьи

Java 11: присоединиться к таблицам, получить потоки Java

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