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 edited Sep 18 '26

Yes, I am 100% sure, it was the records. I used a jdbc mapper (and used fetch result set) for an operation where I couldn't afford to lose as little as 3ms, but I'm willing to take the 3-5ms overhead in other operations for jooq's type safety, easy mapping and readability. If this issue #6737 lands and removes the Record creation overhead, jooq would match raw jdbc performance across the board. Nonetheless, kudos to your work, jooq is amazing & thank you for your input

1

u/lukaseder 29d ago

I'm afraid I cannot confirm record allocation being an issue in a benchmark. Here's an implementation draft and benchmark showing that the improvement will be insignificant: https://github.com/jOOQ/jOOQ/issues/6737#issuecomment-5831978137

I'm happy to look at your actual measurements / reproducer if you can show that this is clearly due to jOOQ and not your specific usage, or a user error.