Comments 5
Чем не устроил банальный хибер и спринг jpa?
Тем, что нужно прописывать много сущностей и их взаимосвязи, а потом их поддерживать, так как они могут меняться. Маленькая вариативность для запросов. Например, у нас есть поиск по 5 параметрам, где все они не обязательно могут присутствовать. Соответственно, нужно делать разные запросы, которые будут содержать в себе разный набор параметров, либо сильно всё усложнять.
Например, у нас есть поиск по 5 параметрам, где все они не обязательно могут присутствовать. Соответственно, нужно делать разные запросы, которые будут содержать в себе разный набор параметров, либо сильно всё усложнять.
Так ведь есть JpaSpecification, как раз для таких целей. С помощью criteriaBuilder создать нужный набор условий.
Но в целом для меня все равно Jooq > Hibernate ( хотя когда нужно каскадно сохранять множество сущностей, то тут хиберу нет равных, но и поддерживать это добро тоже конечно не легко)
Чтобы не генерить цепочки вида
.fetch()
.map(this::getCompanyDtoByRecord)
.get(0);
Можно использовать методы fetchSingle (возвращает одну запись или кидает exception) или fetchOne (возвращает null или одну запись или кидает exception).
Чтобы конвертировать Record в ваш DTO удобно использовать переиспользуемый объект RecordMapper. Его принимают все fetch методы, состоять этот объект будет из одного метода, идентичного вашему getCompanyDtoByRecord.
У вас select возвращает все колонки таблицы Company. В такой ситуации jooq вернёт вам не просто абстрактный Record, а CompanyRecord (который сам вам и сгенерит). У данного класса в добавок к методам getValue будут и таблично-спецефичные геттеры getId и getName.
В итоге ваш код станет вот таким:
public CompanyDto getCompanyById(Integer id) {
return context.selectFrom(Company.COMPANY)
.where(Company.COMPANY.ID.eq(id))
.fetchSingle(new CompanyRecordMapper());
}
...
public class CompanyRecordMapper extends RecordMapper<CompanyRecord, CompanyDto> {
public CompanyDto map(CompanyRecord record) {
return new CompanyDto(record.getId(), record.getName());
}
}
Для развития можно ещё про Jdbi почитать
Почему JOOQ — идеальный инструмент для работы с БД при интеграционном тестировании API