Ответ
Использовал JOOQ (Java Object Oriented Querying) в 2-3 коммерческих проектах на Java/Spring Boot в течение последних ~2 лет, преимущественно с PostgreSQL.
Основные преимущества и сценарии применения:
- Типобезопасность на уровне компиляции: Компилятор проверяет имена таблиц, колонок и типы данных.
- Сложные динамические запросы: Гораздо удобнее, чем конкатенация строк в JPQL или Criteria API.
Пример типобезопасного запроса:
// DSLContext ctx инжектируется или создается из Connection/DataSource
List<String> userNames = ctx
.select(USER.NAME)
.from(USER)
.where(USER.ACTIVE.eq(true)
.and(USER.CREATED_AT.gt(LocalDate.now().minusMonths(1))))
.orderBy(USER.NAME)
.fetch(USER.NAME); // Явное указание поля для маппинга
Пример динамического запроса (поиск с опциональными фильтрами):
SelectConditionStep<?> query = ctx.selectFrom(USER);
if (StringUtils.isNotBlank(searchName)) {
query = query.where(USER.NAME.likeIgnoreCase("%" + searchName + "%"));
}
if (filterByActive != null) {
query = query.where(USER.ACTIVE.eq(filterByActive));
}
List<UserRecord> result = query.fetch();
Интеграция: Бесшовная работа с Spring Boot Transaction Management. Генерация классов из схемы БД через maven/gradle plugin.
Почему JOOQ: Это золотая середина между сырым JDBC (мощно, но много boilerplate) и полноценным ORM вроде Hibernate (удобно, но может генерировать неэффективные запросы). Дает полный контроль над SQL.