Writing queries to access data is usually done using Java
Strings. The query languages of
choice have been SQL for JDBC as well as HQL/JPQL for Hibernate/JPA.
Defining the queries in plain
Strings is powerful but
quite error-prone, as it’s very easy to introduce typos. Beyond that,
there’s little coupling to the actual query source or sink, so column
references (in the JDBC case) or property references (in the HQL/JPQL
context) become a burden in maintenance because changes in the table or
object model cannot be reflected in the queries easily.
The Querydsl project tries to tackle this problem by providing a fluent API to define these queries. The API is derived from the actual table or object model but is highly store- and model-agnostic at the same time, so it allows you to create and use the query API for a variety of stores. It currently supports JPA, Hibernate, JDO, native JDBC, Lucene, Hibernate Search, and MongoDB. This versatility is the main reason why the Spring Data project integrates with Querydsl, as Spring Data also integrates with a variety of stores. The following sections will introduce you to the Querydsl project and its basic concepts. We will go into the details of the store-specific support in the store-related chapters later in this book.
When working with Querydsl, you will
usually start by deriving a metamodel from your domain classes. Although the library can
also use plain
String literals, ...