Статьи

Java14: объединение таблиц базы данных с новой записью Java 14

Знаете ли вы, что вы можете объединить таблицы базы данных в поток Java с функцией предварительного просмотра записи в Java 14? Прочтите эту короткую статью и узнайте, как это делается с помощью ORM Speedment Stream . Начнем с того, как настроить ваш проект.

Настроить

Скачать Java 14 . Перейдите к инициализатору Speedment и загрузите скелет проекта (включая pom.xml ). Измените следующие строки в вашем
файл pom.xml :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<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>

Убедитесь, что у вас установлена ​​последняя версия вашего ide (например, IDEA 2010.1), которая поддерживает новые функции Java 14.

Speedment Joins

Ускорение позволяет динамически присоединяться к таблицам базы данных JOIN: ed в качестве стандартных потоков Java. В этой статье мы будем использовать примерную базу данных Sakila, которая содержит фильмы, актеров, языки и т. Д. Загрузить Sakila
здесь или захватите версию Docker здесь .

Таблицы, представления и объединения могут быть легко преобразованы в стандартные потоки Java с помощью Speedment. Вот как это может выглядеть в Java 14:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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())
            );

Это даст следующий результат:

1
2
3
4
ACADEMY DINOSAUR is in English
ACE GOLDFINGER is in English
ADAPTATION HOLES is in English
...

Разбивка кода

Метод from() берет первую таблицу, которую мы хотим использовать ( Film ).
innerJoinOn() берет определенный столбец второй таблицы, к которой мы хотим присоединиться. Затем метод equal() берет столбец из первой таблицы, который мы хотим использовать в качестве условия соединения. Итак, в этом примере мы получим совпадающие сущности Film и Language где столбец Language.LANGUAGE_ID равен Film.LANGUAGE_ID .

Наконец, build() создаст наш объект Join который, в свою очередь, может быть использован для создания потоков Java. Объект Join можно использовать снова и снова.

Обратите внимание, как конструктор record FilmLanguage предоставляется в
метод build() . Обратите также внимание на то, как фильм и языковая сущность могут быть получены из записи (например, filmLanguage.film() ). Это большое улучшение по сравнению с предыдущей версией Java, где нам приходилось предоставлять довольно длинные пользовательские классы или использовать кортежи с аксессорами, такими как get0() и get1() а не гораздо более описательные film() и language()

РЕЙТИНГ Типы и условия

Мы можем использовать innerJoinOn() , leftJoinOn() , rightJoinOn() и crossJoin() а таблицы можно crossJoin() с использованием условий equal() , notEqual() , lessThan() , lessOrEqual() , greaterThan() и lessOrEqual() .

Что дальше?

Загрузите Java 14 с открытым исходным кодом здесь .
Скачать Speedment здесь .
Прочитайте все о функциональности JOIN в Руководстве пользователя Speedment .

См. Оригинальную статью здесь: Java14 : объединение таблиц базы данных с новой записью Java 14

Мнения, высказанные участниками Java Code Geeks, являются их собственными.