리포지토리에 Jdbc를 사용하기 위한 코드들이 같은 로직으로 코드가 중복되어 있다.
-> 템플릿 콜백 패턴으로 해결
public Member save(Member member) {
String sql = "insert into member(member_id,money) values(?,?)";
template.update(sql, member.getMemberId(), member.getMoney());
return member;
}
public Member findById(String memberId) {
String sql = "select * from member where member_id = ?";
return template.queryForObject(sql, memberRowMapper(), memberId);
}
public void update(String memberId, int money) {
String sql = "update member set money=? where member_id=?";
template.update(sql, money, memberId);
}
public void delete(String memberId) {
String sql = "delete from member where member_id = ?";
template.update(sql, memberId);
}
private RowMapper<Member> memberRowMapper() {
return (rs, rowNum) -> {
Member member = new Member();
member.setMemberId(rs.getString("member_id"));
member.setMoney(rs.getInt("money"));
return member;
};
}
JdbcTemplate
은 JDBC로 개발할 때 발생하는 반복을 대부분 해결한다. 트랜잭션을 위한 커넥션 동기화는 물론이고, 예외 발생 시 스프링 에외 변환기도 자동으로 실행해준다.