CustomerRepositoryJdbc.java
package io.slayyyyer.orders.repository.jdbc;
import io.slayyyyer.orders.domain.Customer;
import io.slayyyyer.orders.repository.CustomerRepository;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.springframework.jdbc.core.simple.JdbcClient;
import org.springframework.stereotype.Repository;
@Repository
public class CustomerRepositoryJdbc implements CustomerRepository {
private final JdbcClient jdbc;
public CustomerRepositoryJdbc(JdbcClient jdbc) {
this.jdbc = jdbc;
}
@Override
public Optional<Customer> findById(UUID id) {
return jdbc.sql("""
select id, email, full_name, created_at
from customers
where id = :id
""")
.param("id", id)
.query(CustomerRepositoryJdbc::mapCustomer)
.optional();
}
@Override
public List<Customer> findAll(int limit, int offset) {
return jdbc.sql("""
select id, email, full_name, created_at
from customers
order by created_at, id
limit :limit offset :offset
""")
.param("limit", limit)
.param("offset", offset)
.query(CustomerRepositoryJdbc::mapCustomer)
.list();
}
private static Customer mapCustomer(java.sql.ResultSet rs, int rowNum) throws java.sql.SQLException {
return new Customer(
rs.getObject("id", UUID.class),
rs.getString("email"),
rs.getString("full_name"),
rs.getTimestamp("created_at").toInstant());
}
}