BackEnd/Spring
[Spring] JdbcTemplate의 RowMapper 구현법 - 익명객체, 람다식
ryuneng
2025. 1. 16. 00:13
반응형
# 목적
- JdbcTemplate의 RowMapper를 익명객체 혹은 람다식으로 구현하는 방법에 대한 이해
1. 익명객체로 작성
- 익명객체로만 람다식 없이 작성
🔎 코드)
@Repository
public class UserDao {
@Autowired
private JdbcTemplate template;
public User getUserById(String id) {
String sql = "select * from sample_users where user_id = ?";
// RowMapper의 구현체(인터페이스를 즉석에서 구현하는 익명객체)
return template.queryForObject(sql, new RowMapper<User>() {
public User mapRow(ResultSet rs, int rownum) throws SQLException {
User user = new User();
user.setId(rs.getString("user_id"));
user.setPassword(rs.getString("user_password"));
return user;
}
}, id); // id는 getUserById의 매개변수니까 인자값(파라미터값)으로 같이 전달해줘야 함
2. 람다식으로 작성
❓ 람다식 : 인터페이스의 구현부(매개변수와 구현코드)를 작성.
* 매개변수에 타입은 안적어도 됨
- 인터페이스 RowMapper를 구현하는 형식은 어차피 매번 동일하기 때문에
간단하게 람다식으로 작성하더라도 자바에서 자동으로 익명객체 형식으로 변환해줌
- 람다식 사용 시 제한사항
- 구현하려는 인터페이스의 '추상메소드'는 무조건 1개만 있어야 함.
2개 이상 있으면 익명객체로 작성해야 함
- 구현하려는 인터페이스의 '추상메소드'는 무조건 1개만 있어야 함.
- 람다식으로 작성 가능한 인터페이스에는 @FunctionalInterface 어노테이션이 붙어있음
- ex) RowMapper
@FunctionalInterface public interface RowMapper<T> { .... }
- ex) RowMapper
🔎 코드)
@Repository
public class UserDao {
@Autowired
private JdbcTemplate template;
public User getUserById(String id) {
String sql = "select * from sample_users where user_id = ?";
return template.queryForObject(sql, (rs, rownum) -> {
User user = new User();
user.setId(rs.getString("user_id"));
user.setPassword(rs.getString("user_password"));
user.setName(rs.getString("user_name"));
user.setTel(rs.getString("user_tel"));
user.setEmail(rs.getString("user_email"));
return user;
}, id); // id는 getUserById의 매개변수니까 인자값(파라미터값)으로 같이 전달해줘야 함
}
}
* 익명내부클래스 이해를 위한 참고 이미지



< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Spring-JdbcTemplate-RowMapper