Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

JustDoEat

RowMapper, MapSqlParameterSource 객체에 대해 알아보자 본문

카테고리 없음

RowMapper, MapSqlParameterSource 객체에 대해 알아보자

kingmusung 2024. 2. 14. 00:28

 

자바버전: 21

스프링부트:3.22

DataBase: H2

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[지금 무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

 

 

MapSqlParameterSource

 

JDBC Template를 사용하여 SQL에 쿼리문을 날리려면 파라미터 형식으로 날립니다.

 

JDBC 템플릿 및 JDBC 관련 작업에서 파라미터를 전달하는 데 사용됩니다. MapSqlParameterSource를 사용하면 맵 형식의 파라미터를 쉽게 생성하고 관리할 수 있습니다. 보통은 쿼리에서 사용할 각 파라미터의 이름과 값을 맵에 저장한 다음 MapSqlParameterSource 객체를 생성할 때 이 맵을 전달합니다

 

일반적으로 JDBC 템플릿을 사용할 때 SQL 쿼리에 파라미터를 전달하는 방법 중 하나로 맵 형식을 많이 사용합니다. 이 방식은 파라미터의 이름과 값을 직관적으로 매핑할 수 있어 코드의 가독성을 높이고, 유연성을 제공합니다.

 

 

Map<String, Object> parameters = new HashMap<>();
parameters.put("name", "John");
parameters.put("age", 30);

    MapSqlParameterSource parameterSource = new MapSqlParameterSource(parameters);
    
    String sql = "INSERT INTO member (name, age) VALUES (:name, :age)";
        jdbcTemplate.update(sql, parameterSource);

 

MapSqlParameterSource객체를 사용하여 파라미터를 전달 하는 역할이다(저장은 별도로 해야함.)

 

 

Map<String, Object> parameters = new HashMap<>();
parameters.put("name", member.getName());

Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));

("name" 부분은 DB의 컬럼 이름이고, "member.getName()" 이 부분은 전달 할 값 입니다.)

 

 


RowMapper

 

RowMapper는 JDBC 결과 집합의 각 행을 객체로 매핑하는 인터페이스입니다. 주로 Spring JDBC에서 사용되며, ResultSet의 각 행을 원하는 형식의 객체로 변환할 때 유용합니다.

 

jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);

 

jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);

 

예시로 JDBC Template 을 통해 쿼리를 날리는 예시를 보자.

 

memberRowMapper()는 RowMapper를 이용하여 자바의 객체로 변환하는 매서드이고, 즉 쿼리문의 결과값을 받아오는 친구이다.

 

name은 "?"에 들어갈 변수이다.

 

RowMapper를 오버라이딩해서 사용하는 memberRowMapper()를 보자

private RowMapper<Member> memberRowMapper() {
    return (rs, rowNum) -> {
        Member member = new Member();
        member.setId(rs.getLong("id"));
        member.setName(rs.getString("name"));
        return member;
    }; }

 

 rs

rs는 ResultSet의 줄임말로, JDBC에서 데이터베이스로부터 결과를 가져오는 데 사용되는 객체입니다.

-> 쿼리문을 날렸을때 반환되는 객체임

 

 rowNum

rowNum은 현재 처리되고 있는 행의 번호를 나타냅니다. 이 값은 ResultSet에서 현재 행의 순서를 나타내며, 0부터 시작합니다. 따라서 rowNum은 ResultSet에서 현재 처리 중인 행의 인덱스입니다

 

 (rs, rowNum) -> { ... }  

람다식입니다. 람다식은 자바 8부터 도입된 함수형 프로그래밍의 표현 방식 중 하나로, 간결하고 간편하게 익명 함수를 표현하는 방법입니다. 여기서 (rs, rowNum)은 람다식의 매개변수 목록을 나타냅니다. rs와 rowNum은 람다식 내에서 사용할 변수들을 선언하는 것입니다. rs는 ResultSet 객체를, rowNum은 행의 번호를 나타내는 정수를 가리킵니다. 그리고 ->는 람다식의 화살표 연산자입니다. 이 연산자는 매개변수 목록과 람다식의 몸체를 구분짓는 역할을 합니다. 왼쪽에는 매개변수가 위치하고, 오른쪽에는 람다식의 실행 코드 블록이 위치합니다. { ... } 내부에는 실제로 수행될 코드가 들어갑니다. 이 코드 블록에서는 ResultSet 객체에서 데이터를 추출하여 Member 객체를 생성하고 초기화한 다음 반환합니다. 이런 방식으로 람다식은 간결하면서도 효율적으로 코드를 표현할 수 있습니다.

 

결과 조회는 객체형식으로 반환 되어서 getString, getLong 이런식으로 할 수 있음.

 

위와같은 이유로 RowMapper를 사용합니다