[Spring] JdbcTemplate의 RowMapper 구현법 - 익명객체, 람다식

류넹·2024년 2월 23일
1

Spring

목록 보기
9/50

# 목적

  • 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개 이상 있으면 익명객체로 작성해야 함
  • 람다식으로 작성 가능한 인터페이스에는 @FunctionalInterface 어노테이션이 붙어있음
    • ex) RowMapper
      @FunctionalInterface
      public interface RowMapper<T> {
      	....
      }

🔎 코드)

@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의 매개변수니까 인자값(파라미터값)으로 같이 전달해줘야 함
	}
}




* 익명내부클래스 이해를 위한 참고 이미지



profile
학습용 커스터마이징 간단 개발자 사전

0개의 댓글