In this tutorial, we will learn how to use the Spring Data CrudRepository interface provided the findAll() method with an example.
YouTube Video
findAll() Method Overview
As the name depicts, the findAll() method allows us to get or retrieve all the entities from the database table.
It belongs to the CrudRepository interface defined by Spring Data.
The findAll() method returns a List of Iterable objects
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
Let's first create a Product entity that we are going to use to save and retrieve to/from the database:
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
Let's create ProductRepository which extends the CrudRepository interface. As we know that CrudRepository interface provides the findAll() method so our ProductRepository interface should extend to the CrudRepository interface to get all its methods:
import net.javaguides.springdatajpacourse.entity.Product;
import org.springframework.data.repository.CrudRepository;
public interface ProductRepository extends CrudRepository<Product, Long> {
}
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.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=true
Make sure that you will create ecommerce database before running the Spring boot application.
Also, change the MySQL username and password as per your MySQL installation on your machine.
Testing findAll() Method
In order to test the findAll() method, we gonna use CommandLineRunner.run() method to execute the testing code while the Spring boot application startup:
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");
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");
productRepository.save(product2);
// get or retrieve all products
Iterable<Product> products = productRepository.findAll();
products.forEach((p) -> {
System.out.println(p.getName());
});
}
}
After finishing the Spring boot application, you can able to see Hibernate-generated SQL statements in a console:
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
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_
Two INSERT SQL statements to save the two entities:
insert
into
products
(active, date_created, description, image_url, last_updated, name, price, sku)
values
(?, ?, ?, ?, ?, ?, ?, ?)
insert
into
products
(active, date_created, description, image_url, last_updated, name, price, sku)
values
(?, ?, ?, ?, ?, ?, ?, ?)
SELECT SQL statement get all entities:
select
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_
Related Spring Data CrudRepository Tutorials
- Spring Data CrudRepository - save() Method
- Spring Data CrudRepository - saveAll() Method
- Spring Data CrudRepository - findById() Method
- Spring Data CrudRepository - findAll() Method
- Spring Data CrudRepository - deleteById() Method
- Spring Data CrudRepository - delete() Method
- Spring Data CrudRepository - deleteAll() Method
- Spring Data CrudRepository - existsById() Method
- Spring Data CrudRepository - count() Method
Comments
Post a Comment
Leave Comment