Знаете ли вы, что вы можете объединить таблицы базы данных в поток 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 EnglishACE GOLDFINGER is in EnglishADAPTATION 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, являются их собственными. |