Spring Boot JPA Batch Insert Example

In this tutorial, you will learn how to use Spring Data JPA to perform batch insert operation in Spring Boot Application.

1. Set up a Spring Boot project

Let's launch Spring Initializr and fill up the following project details:

Project: Maven Project (or Gradle)

Language: Java

Packaging: Jar

Java version: 17

Dependencies: Spring Data JPA, MySQL Driver, and Lombok

Download, extract the project, and import it to your favorite IDE.

2. Configure the MySQL database

Let's open the src/main/resources/application.properties file and add the MySQL configuration properties:


spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=Mysql@123
spring.jpa.hibernate.ddl-auto=update
    

Make sure that you change the MySQL database username and password as per your MySQL installation on your machine.

The spring.jpa.hibernate.ddl-auto=update line ensures that tables and columns get automatically created or updated based on your JPA entities.

3. Create Entity

For the sake of this example, let's use a Person entity:


import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
@Entity
@Table(name = "persons")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
}

4. Create Spring Data JPA Repository - PersonRepository

Let's create an PersonRepository interface that extends the JpaRepository interface from Spring Data JPA:


import com.springdatajpa.springboot.entity.Person;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PersonRepository extends JpaRepository<Person, Long> {
}

5. Service Layer

To perform the batch insert, use the saveAll method provided by Spring Data JPA:


@Service
public class PersonService {

    @Autowired
    private PersonRepository personRepository;

    @Transactional
    public List<Person> savePersons(List<Person> persons) {
        return personRepository.saveAll(persons);
    }
}

Remember to mark the method with @Transactional to ensure it runs within a transaction.

6. Testing the Batch Insert

You can test the batch insert operation by creating a list of Person objects and saving them using the service:


@SpringBootTest
public class BatchInsertTest {

    @Autowired
    private PersonService personService;

    @Test
    public void testBatchInsert() {
        List<Person> persons = new ArrayList<>();
        
        for (int i = 0; i < 200; i++) {
            persons.add(new Person("Name" + i, "name" + i + "@example.com"));
        }
        
        personService.savePersons(persons);
        
        // Add assertions or further test logic as needed.
    }
}

Conclusion

Batch inserts can dramatically improve performance when inserting a large number of entities. By setting up the correct configurations and using the tools provided by Spring Data JPA, you can easily integrate batch operations into your Spring Boot application.