Hello everyone,
I hope this message finds you well. I’d like to share an idea for a
potential feature request, inspired by a brief discussion on SO with Lukas.
*INTRO* When starting a Java Spring project, developers often use JPA for
data mapping because it allows for quick and straightforward setup.
However, as the project grows, they start encountering performance issues
like the infamous N+1 problem et similia.
At this stage, devs make one of the two things happen:
1. Refactoring JPA Mappings: They push themselves to restructure
mappings and use more efficient querying mechanisms with JPA.
2. Switching to Alternatives: They opt for alternatives like JOOQ or
QueryDSL to handle their queries.
Unfortunately, most of the times ,both approaches result in code that is
hard to read, inconsistent, and difficult to maintain. At least in my
experience.
*THE IDEA *Here’s the idea: a strongly opinionated way of defining queries
that starts from the basic thought steps when dealing with data querying in
Java. The focus would be on defining a query plan with filter criteria and
specifying what to load and how it should be loaded, possibly even in a
recursive fashion.
1. Specify Filters: A straightforward mechanism to define and apply
filters to the data set.
2. Specify What to Fetch: A clear way to determine which fields to
retrieve.
3. Recursive Query Plan: The ability to define a query plan that can
handle recursive fetching and recursive criteria, ensuring that related
data is queried efficiently.
At a glance it could look something like this:
https://github.com/thestroke82/leanquery/blob/master/src/main/java/org/frappa/leanquery/controller/CustomerController.java
I've worked with a custom solution very much like this in the past and
observed it performing its job remarkably well. The strongest advantage of
such an approach is that as the codebase grows, readability remains
practically constant, significantly improving maintainability. *CONCLUSION *The
ideas are now out in the open, both in words and code (see the GitHub link
above). I’m eager to hear your thoughts and advice, and I hope we can work
together to evolve this concept into a formal feature request for JOOQ.
One final request: Please refrain from comments that patronize or dismiss
the idea with statements like "JPA already does that" or "X does that too."
Instead, I’m looking for constructive feedback and suggestions on how we
can make this feature a valuable addition to the JOOQ ecosystem.
Thank you for your time and consideration. I look forward to your feedback
and collaboration!
--
You received this message because you are subscribed to the Google Groups "jOOQ
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to jooq-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jooq-user/99bbd0c3-e5af-4ee7-a897-7ff869098288n%40googlegroups.com.