DEV Community

Cover image for JPA Repository query example in Spring Boot | Derived Query
Tien Nguyen
Tien Nguyen

Posted on • Edited on

3 1

JPA Repository query example in Spring Boot | Derived Query

In previous posts, you've known how to use JPQL and native Query to retrieve data from the database using @Query annotation. Today, I will show you way to implement Spring Data JPA Repository query in Spring Boot with Derived Query methods:

  • Structure of Derived Query methods
  • Configure Spring Boot application to work with different database
  • JPA find by field, column name, multiple columns
  • JPA query methods for pagination and sorting

Full article: JPA Repository Query example

Structure of Derived Query methods

Typically, a Derived Query method has 2 elements: subject (the action), and predicate (the conditions).

  • Subject: is the introducing clause (find…By, exists…By, count…By for example), it may contain further expressions (between find/exists/count and By) for result-limiting keywords such as Distinct or Top/First.
  • Predicate: is placed after the subject. It can be entity properties (concatenating with And/Or) followed by one or more keywords (StartingWith, EndingWith, Containing, IgnoreCase...).

For example:

List<Tutorial> findByTitleContainingIgnoreCase(String title);

List<Tutorial> findTop3ByTitleContainingAndPublished(String title, boolean isPublished);
Enter fullscreen mode Exit fullscreen mode

You can find the full list at query method subject keywords and query method predicate keywords.

JPA Repository Query example with Spring Boot

  • Technology:
    • Java 8
    • Spring Boot 2.6.3 (with Spring Data JPA)
    • MySQL/PostgreSQL/H2 (embedded database)
    • Maven 3.8.1
  • Project Structure:

jpa-repository-query-example-spring-boot-project

Let me explain it briefly.

  • Tutorial data model class correspond to entity and table tutorials.
  • TutorialRepository is an interface that extends JpaRepository for derived query methods. It will be autowired in SpringBootQueryExampleApplication.
  • SpringBootQueryExampleApplication is SpringBootApplication which implements CommandLineRunner. We will use TutorialRepository to run Query methods here.
  • Configuration for Spring Datasource, JPA & Hibernate in application.properties.
  • pom.xml contains dependencies for Spring Boot and MySQL/PostgreSQL/H2 database.

Create Entity

In model package, we define Tutorial class.

Tutorial has four fields: id, title, level, description, published, createdAt.

model/Tutorial.java

package com.bezkoder.spring.jpa.query.model;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "tutorials")
public class Tutorial {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  private String title;

  private String description;

  private int level;

  private boolean published;

  @Temporal(TemporalType.TIMESTAMP)
  private Date createdAt;

  public Tutorial() {

  }

  public Tutorial(String title, String description, int level, boolean published, Date createdAt) {
    this.title = title;
    this.description = description;
    this.level = level;
    this.published = published;
    this.createdAt = createdAt;
  }

  // getters and setters
}
Enter fullscreen mode Exit fullscreen mode
  • @Entity annotation indicates that the class is a persistent Java class.
  • @Table annotation provides the table that maps this entity.

  • @Id annotation is for the primary key.

  • @GeneratedValue annotation is used to define generation strategy for the primary key.

  • @Temporal annotation converts back and forth between timestamp and java.util.Date or time-stamp into time. For example, @Temporal(TemporalType.DATE) drops the time value and only preserves the date.

@Temporal(TemporalType.DATE)
private Date createdAt;
Enter fullscreen mode Exit fullscreen mode

Define JPA Repository Query methods

Let's create a repository to interact with database.
In repository package, create TutorialRepository interface that extend JpaRepository.

repository/TutorialRepository.java

package com.bezkoder.spring.jpa.query.repository;

import com.bezkoder.spring.jpa.query.model.Tutorial;

public interface TutorialRepository extends JpaRepository<Tutorial, Long> {

}
Enter fullscreen mode Exit fullscreen mode

In this interface, we will write JPA Derived Queries to fetch data from database with tutorials table like this:

jpa-repository-query-example-spring-boot

For step by step and Github, please visit:
JPA Repository Query example

Further Reading

Using Native Query instead:
Spring JPA Native Query example with Spring Boot

Or JPQL:
Spring JPA @Query example with JPQL

Associations:

You can apply this implementation in following tutorials:

You can continue to write CRUD Rest APIs with:
Spring Boot, Spring Data JPA – Rest CRUD API example

If you want to write Unit Test for the JPA Repository:
Spring Boot Unit Test for JPA Repository with @DataJpaTest

You can also know:

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

Cloudinary image

Zoom pan, gen fill, restore, overlay, upscale, crop, resize...

Chain advanced transformations through a set of image and video APIs while optimizing assets by 90%.

Explore

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️