In this blog post, we will demonstrate how to use the count() method in Spring Data JPA to count a number of records in a database table.
The count() method returns the total number of records (or entities) in the database for a given entity type. It provides a direct and efficient means to achieve this without the need for custom query methods.
In this example, we will use the Product entity to save and retrieve records to/from the MySQL database.
Maven Dependencies
First, you need to add the below 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>
Create 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;
// getter and setter methods @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> { }
Configure MySQL and Hibernate Properties
spring.datasource.url=jdbc:mysql://localhost:3306/demo?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
Testing count() Method
Let's write a JUnit test to test the count() method:
import net.javaguides.springdatajpacourse.entity.Product; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import java.math.BigDecimal; import java.util.List; @DataJpaTest @AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE) class ProductRepositoryTest { @Autowired private ProductRepository productRepository; protected Product getProduct1(){ Product product = new Product(); product.setName("product 1"); product.setDescription("product 1 desc"); product.setPrice(new BigDecimal(100)); product.setSku("product 1 sku"); product.setActive(true); product.setImageUrl("product1.png"); return product; } protected Product getProduct2(){ Product product2 = new Product(); product2.setName("product 2"); product2.setDescription("product 2 desc"); product2.setPrice(new BigDecimal(200)); product2.setSku("product 2 sku"); product2.setActive(true); product2.setImageUrl("product2.png"); return product2; } @Test void testCountMethod(){ Product product = getProduct1(); Product product2 = getProduct2(); productRepository.saveAll(List.of(product, product2)); long count = productRepository.count(); System.out.println(count); }
We are using @DataJpaTest annotation to write a JUnit test ProductRepository count() method.@AutoConfigureTestDatabase annotation is to disable embedded in-memory database support.
Output
Here is the output of the above JUnit test case we wrote for the testing count() method:
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 count(*) as col_0_0_ from products product0_
Note that Spring Data JPA (Hibernate) produces the SQL query to count the number of records that exist in the database table.
select count(*) as col_0_0_ from products product0_
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