Разработчик (и) | Data Geekery GmbH |
---|---|
Стабильный выпуск | 3.12.3 / 31 октября 2019 г. (2019-10-31) |
Написано на | Java |
Операционная система | Кросс-платформенная |
Платформа | Java |
Тип | Объектно-реляционное сопоставление |
Лицензия | Двойная лицензия: ASL 2.0 и коммерческий |
Веб-сайт | http://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 * FROM AUTHOR a WHERE EXISTS (SELECT 1 FROM BOOK WHERE BOOK.STATUS = 'SOLD OUT' AND BOOK.AUTHOR_ID = a.МНЕ БЫ);
И его эквивалент в jOOQ DSL:
// Используйте таблицу с псевдонимом в операторе select 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 (" а.ID ")))));
Или проще, используя генерацию кода из базы данных метаданных для генерации констант:
// Используем таблицу с псевдонимом в заключительной части оператора select Автор a = AUTHOR.as ("a"); create.selectFrom (a).where (существует (selectOne ().from (BOOK).where (BOOK.STATUS.equal (BOOK_STATUS.SOLD_OUT)).and (BOOK.AUTHOR_ID.equal (a.ID))));