Spring Data JPA Date Range Between Query Method Example

In this tutorial, we will learn how to write a Between query method or finder method using Spring Data JPA.

Maven Dependencies

Create a Spring boot project and add the following maven dependencies to it:



Product Entity

Let's first create a Product entity class and add the following content to it:

package com.springdatajpa.springboot.entity;

import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import jakarta.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

        name = "products",
        schema = "ecommerce",
        uniqueConstraints = {
                        name = "sku_unique",
                        columnNames = "stock_keeping_unit"
public class Product {

            strategy = GenerationType.IDENTITY
    private Long id;

    @Column(name = "stock_keeping_unit", nullable = false)
    private String sku;

    @Column(nullable = false)
    private String name;

    private String description;
    private BigDecimal price;
    private boolean active;
    private String imageUrl;

    private LocalDateTime dateCreated;

    private LocalDateTime lastUpdated;


Let's create ProductRepository which extends JpaRepository and add the following code to it:
import com.springdatajpa.springboot.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;

import java.math.BigDecimal;
import java.util.List;
import java.time.LocalDateTime;
public interface ProductRepository extends JpaRepository<Product, Long> {
     * Returns a products whose dateCreated between start date and end date
     * @param startDate
     * @param endDate
     * @return
    List<Product> findByDateCreatedBetween(LocalDateTime startDate, LocalDateTime endDate);
Spring Data JPA query method to find or retrieve products based on the date range (the start date and end date):
    List<Product> findByDateCreatedBetween(LocalDateTime startDate, LocalDateTime endDate);

Configure MySQL and Hibernate Properties

Let's use the MySQL database to store and retrieve the data in this example and we gonna use Hibernate properties to create and drop tables.

Open the application.properties file and add the following configuration to it:


spring.jpa.hibernate.ddl-auto = create-drop

Make sure that you will create an ecommerce database before running the Spring boot application. Also, change the MySQL username and password as per your MySQL installation on your machine.

Testing Spring Data JPA - Date Range Between Query Method

Let's write the JUnit test to test Spring Data JPA - Date Range Between Query Method:

import com.springdatajpa.springboot.entity.Product;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.math.BigDecimal;
import java.time.LocalDateTime;

public class QueryMethodsTest {

    private ProductRepository productRepository;

    void findByDateCreatedBetweenMethod(){

        // start date
        LocalDateTime startDate = LocalDateTime.of(2022,02,13,17,48,33);
        // end date
        LocalDateTime endDate = LocalDateTime.of(2022,02,13,18,15,21);

        List<Product> products = productRepository.findByDateCreatedBetween(startDate, endDate);

        products.forEach((p) ->{
Here is the output of the above JUnit test: