이번에 쓰는 TIL부터는 간단한 제목을 달려고 한다. 나중에 다시 읽어보려고 쓰는 글인데 언제 썼는지 찾기가 너무 힘들다..
DataSource를 이용해서 커넥션을 가져와서 DB에 접근하는 방식은 매번 같은 코드를 중복해서 작성해야한다. JDBC Template은 템플릿 콜백을 통해서 간결한 코드를 작성할 수 있도록 도와준다.
public List<Customer> findByName(String name) {
List<Customer> customers = new ArrayList<>();
try (
final Connection connection = dataSource.getConnection(); // 매번 반복 필요
final PreparedStatement statement = connection.prepareStatement("select * from customers where name like ? ");
) {
statement.setString(1, "%" + name + "%");
final ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
UUID customerId = toUUID(resultSet.getBytes("id"));
String customerName = resultSet.getString("name");
final LocalDateTime createdAt = resultSet.getTimestamp("created_at").toLocalDateTime();
final boolean isBanned = resultSet.getBoolean("is_banned");
customers.add(new Customer(customerId, customerName, createdAt, isBanned));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
return customers;
public List<Customer> findByName(String name) {
return jdbcTemplate.query("select * from customers where name like ? ",
(resultSet, i) -> mapToCustomer(resultSet),
"%" + name + "%");
}
기존의 코드에서 반복적인 코드를 템플릿 콜백 패턴을 이용해 내부적으로 처리한다.
Jdbc를 사용하면서 쓰게되는 쿼리문의 파라미터들의 이름을 이용해서 값을 바인딩하는 방법이다. 주로 Map을 이용해서 파라미터들의 값을 넘겨준다.