Объектно-ориентированные запросы JOOQ - JOOQ Object Oriented Querying

jOOQ
Разработчики) Data Geekery GmbH
Стабильный выпуск
3.14.8 / 26 февраля 2021 г . ; 7 месяцев назад ( 2021-02-26 )
Репозиторий github .com / jOOQ / jOOQ
Написано в Джава
Операционная система Кроссплатформенность
Платформа Джава
Тип Объектно-реляционное отображение
Лицензия Двойная лицензия: ASL 2.0 и коммерческая
Веб-сайт www .jooq .org

Объектно-ориентированные запросы 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))));

Смотрите также

использованная литература

внешние ссылки