Объектно-ориентированные запросы JOOQ - JOOQ Object Oriented Querying
Разработчики) | Data Geekery GmbH |
---|---|
Стабильный выпуск | 3.14.8 / 26 февраля 2021 г .
|
Репозиторий | github |
Написано в | Джава |
Операционная система | Кроссплатформенность |
Платформа | Джава |
Тип | Объектно-реляционное отображение |
Лицензия | Двойная лицензия: ASL 2.0 и коммерческая |
Веб-сайт | www |
Объектно-ориентированные запросы jOOQ , широко известные как jOOQ , - это легкая программная библиотека для отображения баз данных на Java, которая реализует шаблон активной записи . Его цель - быть как реляционной, так и объектно-ориентированной , предоставляя предметно-ориентированный язык для построения запросов из классов, сгенерированных из схемы базы данных .
Парадигма
jOOQ утверждает, что SQL должен стоять на первом месте при любой интеграции базы данных. Таким образом, он не вводит новый язык текстовых запросов , а скорее позволяет создавать простой SQL из объектов jOOQ и кода, сгенерированного из схемы базы данных. jOOQ использует JDBC для вызова базовых запросов SQL.
Хотя он обеспечивает абстракцию поверх JDBC, jOOQ не имеет такой функциональности и сложности, как стандартные библиотеки объектно-реляционного сопоставления, такие как EclipseLink или Hibernate .
Близость jOOQ к SQL имеет преимущества перед типичными библиотеками объектно-реляционного сопоставления. SQL имеет множество функций, которые нельзя использовать в парадигме объектно-ориентированного программирования ; этот набор различий называется несоответствием объектно-реляционного импеданса . Благодаря близости к SQL jOOQ помогает предотвратить синтаксические ошибки и проблемы с отображением типов. Также заботится о связывании переменных. В jOOQ также можно создавать очень сложные запросы, которые включают псевдонимы, объединения , вложенные выборки и сложные объединения . jOOQ также поддерживает специфичные для базы данных особенности, такие как UDT , типы перечислений , хранимые процедуры и собственные функции.
Пример
Выбор вложенного запроса из таблицы с псевдонимом
-- Select authors with books that are sold out
SELECT * FROM AUTHOR a
WHERE EXISTS (SELECT 1
FROM BOOK
WHERE BOOK.STATUS = 'SOLD OUT'
AND BOOK.AUTHOR_ID = a.ID);
И его аналог в jOOQ DSL:
// Use the aliased table in the select statement
create.selectFrom(table("AUTHOR").as("a"))
.where(exists(selectOne()
.from(table("BOOK"))
.where(field("BOOK.STATUS").equal(field("BOOK_STATUS.SOLD_OUT")))
.and(field("BOOK.AUTHOR_ID").equal(field("a.ID")))));
Или проще, используя генерацию кода из метаданных базы данных для генерации констант:
// Use the aliased table in the select statement
final Author a = AUTHOR.as("a");
create.selectFrom(a)
.where(exists(selectOne()
.from(BOOK)
.where(BOOK.STATUS.equal(BOOK_STATUS.SOLD_OUT))
.and(BOOK.AUTHOR_ID.equal(a.ID))));