In this tutorial, we will learn how to write a Like query method or finder method using Spring Data JPA.
Spring Data JPA has greatly simplified the process of building database queries through the use of intuitive method naming conventions. Among the available conventions, the Like keyword allows developers to perform string-matching operations without having to write the actual SQL or JPQL.
Example: Let's write the Spring Data JPA query method to find or retrieve products for a specified pattern in a column ( SQL LIKE condition).
/**
* Return products based on SQL like condition
* @param name
* @return
*/
List<Product> findByNameLike(String name);
In this example, we will use the Product entity to save into the MySQL database.
Maven Dependencies
Create a Spring boot project and add the following maven dependencies to it:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
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;
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Table(
name = "products",
schema = "ecommerce",
uniqueConstraints = {
@UniqueConstraint(
name = "sku_unique",
columnNames = "stock_keeping_unit"
)
}
)
public class Product {
@Id
@GeneratedValue(
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;
@CreationTimestamp
private LocalDateTime dateCreated;
@UpdateTimestamp
private LocalDateTime lastUpdated;
}
ProductRepository
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;
public interface ProductRepository extends JpaRepository<Product, Long> {
/**
* Return products based on SQL like condition
* @param name
* @return
*/
List<Product> findByNameLike(String name);
}
List<Product> findByNameLike(String name);
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.datasource.url=jdbc:mysql://localhost:3306/ecommerce?useSSL=false
spring.datasource.username=root
spring.datasource.password=Mysql@123
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
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 - Like Query Method
Let's write the JUnit test to test Spring Data JPA - Like 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;
@SpringBootTest
public class QueryMethodsTest {
@Autowired
private ProductRepository productRepository;
@Test
void findByNameLikeMethod(){
List<Product> products = productRepository.findByNameLike("product 1");
products.forEach((p) -> {
System.out.println(p.getId());
System.out.println(p.getName());
});
}
}
Here is the output of the above JUnit test:
Related Spring Data JPA Examples
- Spring Data JPA - save() Method Example
- Spring Data JPA - saveAll() Method Example
- Spring Data JPA - findById() Method Example
- Spring Data JPA - findAll() Method Example
- Spring Data JPA - count() Method Example
- Spring Data JPA - deleteById() Method Example
- Spring Data JPA - delete() Method Example
- Spring Data JPA - deleteAll() Method Example
- Spring Data JPA - Distinct Query Method Example
- Spring Data JPA - GreaterThan Query Method Example
- Spring Data JPA - LessThan Query Method Example
- Spring Data JPA - Containing Query Method Example
- Spring Data JPA - Like Query Method Example
- Spring Data JPA - Between Query Method Example
- Spring Data JPA - Date Range Between Query Method Example
- Spring Data JPA - In Clause Query Method Example
Comments
Post a Comment