#1
This guide shows how to integrate Apache Derby with Spring Data JPA to manage data easily using repositories and minimal boilerplate code.

1. Add Dependencies

In pom.xml:
<dependency>
  <groupId>org.apache.derby</groupId>
  <artifactId>derby</artifactId>
  <scope>runtime</scope>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2. Configure Derby

In application.properties:
spring.datasource.url=jdbc:derby:memory:demoDB;create=true
spring.datasource.driver-class-name=org.apache.derby.jdbc.EmbeddedDriver
spring.jpa.hibernate.ddl-auto=update
This sets up an in-memory Derby database that initializes on startup.

3. Create Entity

import jakarta.persistence.*;

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

    // getters and setters
}

4. Create Repository

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
Spring Data JPA automatically provides CRUD methods like save, findAll, findById, and deleteById.

5. Service Layer (Optional)

import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class EmployeeService {
    private final EmployeeRepository repo;

    public EmployeeService(EmployeeRepository repo) {
        this.repo = repo;
    }

    public List<Employee> getAll() {
        return repo.findAll();
    }

    public Employee save(Employee e) {
        return repo.save(e);
    }
}

6. REST Controller

import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/employees")
public class EmployeeController {
    private final EmployeeService service;

    public EmployeeController(EmployeeService service) {
        this.service = service;
    }

    @GetMapping
    public List<Employee> all() {
        return service.getAll();
    }

    @PostMapping
    public Employee add(@RequestBody Employee e) {
        return service.save(e);
    }
}

7. Test the API

Run Spring Boot:
mvn spring-boot:run
Test endpoints:
# Add employee
curl -X POST http://localhost:8080/employees -H "Content-Type: application/json" -d '{"name":"Alice","role":"Developer"}'

# Get all employees
curl http://localhost:8080/employees

image quote pre code