Spring Data JPA example with CRUD

1 min read

Spring Data JPA example with CRUD

Spring Data JPA is a powerful framework for managing the persistence layer in Java applications. It simplifies database interactions by providing ready-to-use repository methods and abstraction over JPA. In this guide, we’ll cover practical examples of selecting, inserting, and updating data using Spring Data JPA.

Step-by-Step Examples

1. Define the Entity

We’ll start by defining an entity named Employee to represent our database table:

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

    private String name;
    private String department;
    private double salary;

    // Getters and setters
}

2. Create the Repository Interface

Spring Data JPA provides the JpaRepository interface for implementing data access. Here’s a repository for the Employee entity:

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    List<Employee> findByDepartment(String department);
}

3. Practical Examples

SELECT Example

Suppose you want to fetch all employees belonging to a specific department, such as “HR”:

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeRepository employeeRepository;

    @GetMapping("/{department}")
    public List<Employee> getEmployeesByDepartment(@PathVariable String department) {
        return employeeRepository.findByDepartment(department);
    }
}

When accessing /employees/HR, Spring Data JPA automatically executes the following SQL query:

SELECT * FROM Employee WHERE department = 'HR';

INSERT Example

To add a new employee to the database, you can use the save() method:

@PostMapping("/add")
public Employee addEmployee(@RequestBody Employee employee) {
    return employeeRepository.save(employee);
}

When you send a POST request with the employee details, Spring Data JPA generates the following SQL query:

INSERT INTO Employee (name, department, salary) VALUES ('Alice', 'HR', 50000);

UPDATE Example

To update the salary of an existing employee, first retrieve the employee, modify the object, and save it back:

@PutMapping("/{id}/update-salary")
public Employee updateEmployeeSalary(@PathVariable Long id, @RequestParam double newSalary) {
    Employee employee = employeeRepository.findById(id)
                          .orElseThrow(() -> new RuntimeException("Employee not found"));
    employee.setSalary(newSalary);
    return employeeRepository.save(employee);
}

This generates the following SQL query:

UPDATE Employee SET salary = 60000 WHERE id = 1;

Additional Features

Transaction Management

Spring Data JPA works seamlessly with Spring’s transaction management. You can annotate methods with @Transactional to group multiple operations within a single transaction.

Error Handling

Spring Data JPA integrates well with Spring’s exception handling mechanisms. Use @ExceptionHandler to provide custom error responses for database-related exceptions.

Advantages

  1. Reduces boilerplate code for common database operations.
  2. Provides seamless integration with other Spring modules.
  3. Supports dynamic queries and bulk operations.

Conclusion

Spring Data JPA’s ability to simplify SELECT, INSERT, and UPDATE operations makes it an indispensable tool for managing persistence in Java applications. Its developer-friendly features and efficiency in handling database interactions help reduce the complexity of application development. Dive into Spring Data JPA, and let its simplicity supercharge your Java projects!

🤞 Never miss a story from us, get weekly updates to your inbox!