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