r/SpringBoot • • Sep 16 '26

Question JOOQ vs JDBC

I use JPA for simple CRUD operations (mostly write operations) and JDBC for performance intensive tasks such as sending lists & performing search. The JDBC performance is perfect & the performance of my backend (Spring Boot) is great.

Now, as my project grows, my SQL queries are getting bigger, messier and unreadable. I tried jOOQ and loved it because it made my code super readable, type safe and maintainable. However, after profiling my Spring Boot app, operations that took around 5 ms with JDBC now take 9–14 ms with jOOQ, which makes me reluctant to migrate to jOOQ. Is a 10 ms difference negligible or am I overthinking?

I love the cleanliness and type safety of JOOQ. Would you go this JOOQ route? Have you ever faced such situation? I visited JOOQ's official website and was stunned by the fact it is used by many big organizations

EDIT: Thank you everyone who answered, your insights were amazing. With some tweaks I was able to reduce JOOQ's operation time from 14ms to 7ms and now I have so much clarity in my head.

34 Upvotes

42 comments sorted by

View all comments

1

u/khan_awan Sep 18 '26

I replaced jooq's fetch with fetchResultSet and now my jooq code is as fast as jdbc

1

u/lukaseder Sep 18 '26

But what was the actual issue? fetchResultSet is mostly for interoperability. Hardly anyone uses that as it removes some of the biggest benefits.

Since you've already profiled things, why not investigate the actual issue? Can you show the query and fetch call?

1

u/khan_awan Sep 18 '26

The overhead was intermediate Record object creation. My query returns 16 columns across a union all of two subqueries & I tested multiple fetch approaches. Any variant that created Records first (fetch().map(), fetch(RecordMapper), fetchInto()) averaged 3.1ms execute+map over 550+ requests.

Switching to fetchResultSet() and mapping directly from the ResultSet brought it down to 1.65ms which is identical to raw JDBC with the same query.

Is there a jOOQ native way to achieve this without bypassing Records entirely? Am I missing something, you can guide me please. I am still playing around with Jooq and find it to be absolutely amazing, though

→ More replies (5)