Blog

Spring Data JPA CRUD Example

Key Takeaways

  • Spring Data JPA simplifies CRUD operations by extending the CrudRepository interface.
  • Entities are mapped using JPA annotations, automating standard database operations.
  • The Spring Boot framework accelerates application setup with its convention-over-configuration approach.

Spring Data JPA

Spring Data JPA Tutorial

Spring Data JPA Example

Spring Data JPA CRUD Example

Spring Data JPA vs Hibernate

Spring Data JPA Interview Questions

User Entity

package userservice.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String name;

    public long getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

User Repository

package userservice.repository;

import userservice.model.User;
import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository {
    // Additional query methods, if necessary
}

CRUD Examples

package userservice;

import userservice.model.User;
import userservice.repository.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

    private static final Logger log =
            LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public CommandLineRunner demo(UserRepository repo) {
        return (args) -> {
            // CREATE
            User user = new User();
            user.setName("Alice");
            repo.save(user);
            
            log.info("User created: " + user);

            // READ
            User savedUser = repo.findById(user.getId()).orElseThrow(()-> new RuntimeException("User not found"));
            
            log.info("User retrieved: " + savedUser);

            // UPDATE
            savedUser.setName("Ted");
            repo.save(savedUser);
            
            log.info("User updated: " + savedUser);

            // DELETE
            repo.delete(savedUser);
            log.info("User deleted");
        };
    }
}

FAQ

What dependencies do I need for Spring Data JPA?

You'll need spring-boot-starter-data-jpa in your Maven or Gradle build files, along with a database connector like H2 for in-memory databases or MySQL/PostgreSQL for production.

How do I customize repository methods?

You can extend CrudRepository with custom query methods, utilizing JPQL or Spring Data's derived query mechanisms.

What is the purpose of @GeneratedValue in JPA?

The @GeneratedValue annotation specifies the primary key generation strategy, such as AUTO or IDENTITY, to efficiently manage the unique identifiers in your entity.

Mastering the tech interviewWhat everyone is doing wrong in tech interviews