🎓 Check Out My Top 25 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare
In this tutorial, we will learn how to write a query method for distinct results in the Spring Data JPA repository.
JPA query methods are the most powerful methods, we can create query methods to select the records from the database without writing SQL queries. Behind the scenes, Spring Data JPA will create SQL queries based on the query method and execute the query for us.public Product findDistinctByName(String title);Maven Dependencies
Add the following maven dependencies to your Spring Boot project: <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.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>Product Entity
package net.javaguides.springdatajpacourse.entity;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import jakarta.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
@Entity
@Table(name="products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "sku")
private String sku;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@Column(name = "price")
private BigDecimal price;
@Column(name = "image_url")
private String imageUrl;
@Column(name = "active")
private boolean active;
@Column(name = "date_created")
@CreationTimestamp
private Date dateCreated;
@Column(name = "last_updated")
@UpdateTimestamp
private Date lastUpdated;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public Date getDateCreated() {
return dateCreated;
}
public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}
public Date getLastUpdated() {
return lastUpdated;
}
public void setLastUpdated(Date lastUpdated) {
this.lastUpdated = lastUpdated;
}
@Override
public String toString() {
return "Product{" +
"id=" + id +
", sku='" + sku + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
", price=" + price +
", imageUrl='" + imageUrl + '\'' +
", active=" + active +
", dateCreated=" + dateCreated +
", lastUpdated=" + lastUpdated +
'}';
}
}ProductRepository
import net.javaguides.springdatajpacourse.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
/**
* Return the distinct product entries whose name is given as a method parameter
* If no product entry is found, this method returns null.
*/
public Product findDistinctByName(String title);
}public Product findDistinctByName(String title);Configure MySQL and Hibernate Properties
spring.datasource.url=jdbc:mysql://localhost:3306/ecommerce?useSSL=false
spring.datasource.username=root
spring.datasource.password=Mysql@123
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=trueTesting Spring Data JPA Query Method - Distinct
import net.javaguides.springdatajpacourse.entity.Product;
import net.javaguides.springdatajpacourse.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@SpringBootApplication
public class SpringDataJpaCourseApplication implements CommandLineRunner{
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringDataJpaCourseApplication.class, args);
}
@Autowired
private ProductRepository productRepository;
@Override
public void run(String... args) throws Exception {
Product product = new Product();
product.setName("product 1");
product.setDescription("product 1 desc");
product.setPrice(new BigDecimal(100));
product.setDateCreated(new Date());
product.setLastUpdated(new Date());
product.setSku("product 1 sku");
product.setActive(true);
product.setImageUrl("product1.png");
// save product
productRepository.save(product);
Product product2 = new Product();
product2.setName("product 2");
product2.setDescription("product 2 desc");
product2.setPrice(new BigDecimal(200));
product2.setDateCreated(new Date());
product2.setLastUpdated(new Date());
product2.setSku("product 2 sku");
product2.setActive(true);
product2.setImageUrl("product2.png");
// save product 2
productRepository.save(product2);
// test query method with multiple parameters
Product distinctProduct = productRepository.findDistinctByName("product 1");
}
}Hibernate:
insert
into
products
(active, date_created, description, image_url, last_updated, name, price, sku)
values
(?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
products
(active, date_created, description, image_url, last_updated, name, price, sku)
values
(?, ?, ?, ?, ?, ?, ?, ?)
Hibernate:
select
distinct product0_.id as id1_0_,
product0_.active as active2_0_,
product0_.date_created as date_cre3_0_,
product0_.description as descript4_0_,
product0_.image_url as image_ur5_0_,
product0_.last_updated as last_upd6_0_,
product0_.name as name7_0_,
product0_.price as price8_0_,
product0_.sku as sku9_0_
from
products product0_
where
product0_.name=?select
distinct product0_.id as id1_0_,
product0_.active as active2_0_,
product0_.date_created as date_cre3_0_,
product0_.description as descript4_0_,
product0_.image_url as image_ur5_0_,
product0_.last_updated as last_upd6_0_,
product0_.name as name7_0_,
product0_.price as price8_0_,
product0_.sku as sku9_0_
from
products product0_
where
product0_.name=?Related Spring Data JPA Query Method Tutorials
My Top and Bestseller Udemy Courses. The sale is going on with a 70 - 80% discount. The discount coupon has been added to each course below:
Build REST APIs with Spring Boot 4, Spring Security 7, and JWT
[NEW] Learn Apache Maven with IntelliJ IDEA and Java 25
ChatGPT + Generative AI + Prompt Engineering for Beginners
Spring 7 and Spring Boot 4 for Beginners (Includes 8 Projects)
Available in Udemy for Business
Building Real-Time REST APIs with Spring Boot - Blog App
Available in Udemy for Business
Building Microservices with Spring Boot and Spring Cloud
Available in Udemy for Business
Java Full-Stack Developer Course with Spring Boot and React JS
Available in Udemy for Business
Build 5 Spring Boot Projects with Java: Line-by-Line Coding
Testing Spring Boot Application with JUnit and Mockito
Available in Udemy for Business
Spring Boot Thymeleaf Real-Time Web Application - Blog App
Available in Udemy for Business
Master Spring Data JPA with Hibernate
Available in Udemy for Business
Spring Boot + Apache Kafka Course - The Practical Guide
Available in Udemy for Business
Comments
Post a Comment
Leave Comment