일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- aPK
- 안됨
- 데이터바인딩
- react-native
- 리액트
- git인증
- flutter
- 예제
- gradle
- sourcetree
- 개발환경설정
- Invalid credentials
- 디버깅
- 인증문제해결
- WPF
- 안드로이드
- Android
- react
- Git
- VisualStudio
- not working
- 리액트 네이티브
- 빌드 오류
- 설정
- 뒤로가기 안됨
- Kotlin
- 안드로이드 스튜디오
- bitbucket
- AWS
- EC2
- Today
- Total
물에 살고싶은 개발자
메모용 jdbcTemplate.query 본문
jdbcTemplate.query()는 인자값으로
List<T> query( String sql , RowMapper<T> rowMapper )
List<T> query( String sql , Object[] args , RowMapper<T> rowMapper )
List<T> query( String sql , RowMapper<T> rowMapper , Object...args )
이렇게 정의되어있다.
복잡해보이지만 간단하게 얘기하자면
sql이 말그대로 쿼리문이다.
DBA에서 쓰는 "SELECT *FROM 테이블명 WHERE 조건" 따위의 쿼리문들을 String 형식으로 인자값을 보내는것이라고 생각하면 된다.
두번째 인자값인 RowMapper 라는 임의클래스는 즉 실질적으로 쿼리를 DB에 날려 결과로 되돌아온 데이터들을 실질적으로 리턴시키는 클래스라고 생각하면 쉽다.
두번째 혹은 세번째 인자값인 오브젝트가 쿼리문에서의 핵심이라면 핵심인 부분인데,
만약 첫번째 인자값인 쿼리문이 "SELECT *FROM 테이블명 WHERE email = ?" 이런 형태로
?라는 녀석이 들어가 있을 경우 object가 저 물음표에 순서대로 들어가게 된다
즉 query( "SELECT *FROM 테이블명 WHERE email = ?" , RowMapper(생략){생략} , email )
이렇게 작성했을 경우 쿼리문이
"SELECT *FROM 테이블명 WHERE email = email" 이렇게 작성되서 날아간다고 생각하면된다.
그럼 저 쿼리문으로 인해 DB에서 날아온 결과가 RowMapper의 인자값인 ResultSet으로 들어가고 RowMapper의 임의클래스에서 리턴되는 값이 query함수의 실질적인 리턴값이 된다는것이다.
내가 보고있는 책에 있는 예제 코드를 쓰자면
Listresults = jdbcTemplate.query( "select * from MEMBER where EMAIL = ?", new RowMapper () { @Override public Member mapRow(ResultSet rs, int rowNum) throws SQLException { Member member = new Member(rs.getString("EMAIL"), rs.getString("PASSWORD"), rs.getString("NAME"), rs.getTimestamp("REGDATE")); member.setId(rs.getLong("ID")); return member; } }, email);
이 코드에서
첫번째 인자값인 쿼리문의 ? 에는 마지막 인자값인 email이 들어가 쿼리를 날리고
쿼리로 인해 돌아온 값이 public Member mapRow(ResultSet rs, int rowNum)의
rs로 들어가는것이다.
기본적인 형태이고 해서 일단 기록해 둔다.
(사실은 내가 쓸때마다 헷갈려서 ;;)
코드출처 : 초보 웹 개발자를 위한 Spring 4 프로그래밍 입문 / 최범균 지음 / 가메출판사