JOOQ (Java Object Oriented Querying) - open source инструмент с кодогенерацией для работы с SQL в Java. Из коробки JOOQ предоставляет удобный DSL для составления запросов, а также генератор классов на основе метаданных ДБ.
Как это выглядит?
Например для запроса с INSERT
INSERT INTO Table (Field, AnotherField)
VALUES ('value1', 'value2');
при использовании генерации, код будет выглядеть так
db.insertInto(TABLE)
.set(TABLE.FIELD, "value1")
.set(TABLE.ANOTHER_FIELD, "value2")
.execute();
Для SELECT
SELECT * FROM Table
WHERE Field = 'value1' AND AnotherField = 'value2'
вот так
Record result = db.select().from(TABLE)
.where(TABLE.FIELD.equal("value1")
.and(TABLE.ANOTHER_FIELD.equal("value2"))).fetchAny();
Где TABLE, FIELD - public static final поля сгенеренного Table.class.
Мапинг
При этом JOOQ умеет мапить получившейся записи, например result из предыдущего класса можно замапить на Table.class
Table resultTable = result.into(Table.class);
Еще
Можно пойти дальше и добавить генерацию assert-ов на основе assertJ для сгенеренных классов
TableAssert.assertThat(resultTable)
.hasField(expectedField).hasAnotherField(expectedAnotherField);
Чем нравится
- DSL
- Кодогенерация
Минусы
Из минусов можно отметить, что далеко не все БД поддерживаются, при этом поддержка большинства БД платно