Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- JPA
- Routing Key
- Web
- kafka
- Spring
- JPQL
- 쿠버네티스
- DI
- mybatis
- 컨테이너
- redis
- 서블릿 컨테이너
- securitycontextholderfilter
- dockerhub
- JWT
- 페이징
- 스프링 부트
- Spring Container
- MSA
- DLQ
- Dead Letter Queue
- 지연 로딩
- CORS
- docker
- Spring Data JPA
- @Transactional
- JdbcTemplate
- @ComponentScan
- AWS
- docker compose
Archives
- Today
- Total
look-forest
데이터 접근 기술 - 스프링 JdbcTemplate 본문
JdbcTemplate의 장점
- 설정의 편리함
JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있는데, 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 그리고 별도의 복잡한 설정없이 바로 사용할 수 있다. - 반복 문제 해결
JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리해준다. 개발자는 SQL을 작성하고, 전달할 파리미터를 정의하고, 응답 값을 매핑하기만 하면 된다.
그 외 대부분의 반복 작업을 대신 처리해준다.
- 커넥션 획득
- statement 를 준비하고 실행
- 결과를 반복하도록 루프를 실행
- 커넥션 종료, statement , resultset 종료
- 트랜잭션 다루기 위한 커넥션 동기화
- 예외 발생시 스프링 예외 변환기 실행
주요 기능
- JdbcTemplate : 순서 기반 파라미터 바인딩을 지원한다.
- NamedParameterJdbcTemplate : 이름 기반 파라미터 바인딩을 지원한다. (권장)
- SimpleJdbcInsert : INSERT SQL을 편리하게 사용할 수 있다.
- SimpleJdbcCall : 스토어드 프로시저를 편리하게 호출할 수 있다
정리
실무에서 가장 간단하고 실용적인 방법으로 SQL을 사용하려면 JdbcTemplate을 사용하면 된다. JPA와 같은 ORM 기술을 사용하면서 동시에 SQL을 직접 작성해야 할 때가 있는데, 그때도 JdbcTemplate을 함께 사용하면 된다.
그런데 JdbcTemplate의 최대 단점이 있는데, 바로 동적 쿼리 문제를 해결하지 못한다는 점이다. 그리고 SQL을 자바 코드로 작성하기 때문에 SQL 라인이 코드를 넘어갈 때 마다 문자 더하기를 해주어야 하는 단점도 있다.
동적 쿼리 문제를 해결하면서 동시에 SQL도 편리하게 작성할 수 있게 도와주는 기술이 바로 MyBatis 이다.
참고
RowMapper()
데이터베이스의 조회 결과를 객체로 변환할 때 사용한다.
JDBC를 직접 사용할 때 ResultSet 를 사용했던 부분을 떠올리면 된다. 차이가 있다면 다음과 같이 JdbcTemplate이 다음과 같은 루프를 돌려주고, 개발자는 RowMapper 를 구현해서 그 내부 코드만 채운다고 이해하면 된다.
BeanPropertyRowMapper을 사용하면 클래스를 이용해 간단히 구현할 수 있다.
while(resultSet 이 끝날 때 까지) {
rowMapper(rs, rowNum)
}
Item item = template.queryForObject(sql, itemRowMapper(), id);
private RowMapper<Item> itemRowMapper() {
return (rs, rowNum) -> {
Item item = new Item();
item.setId(rs.getLong("id"));
item.setItemName(rs.getString("item_name"));
item.setPrice(rs.getInt("price"));
item.setQuantity(rs.getInt("quantity"));
return item;
};
}
private RowMapper<Item> itemRowMapper() {
//BeanPropertyRowMapper 는 ResultSet 의 결과를 받아서 자바빈 규약에 맞추어 데이터를 변환한다.
return BeanPropertyRowMapper.newInstance(Item.class); //camel 변환 지원
}
별칭과 관례의 불일치
별칭 as 를 사용해서 SQL 조회 결과의 이름을 변경 가능.
BeanPropertyRowMapper 는 언더스코어 표기법을 카멜로 자동 변환해준다.
이름 지정 바인딩에서 자주 사용하는 파라미터의 종류는 크게 3가지가 있다.
- Map
- SqlParameterSource
- MapSqlParameterSource
- BeanPropertySqlParameterSource
참고 자료 & 이미지 출처
스프링 DB 2편 - 데이터 접근 기술 (김영한 님)
'Spring > Spring 데이터 접근 - 활용 기술' 카테고리의 다른 글
| 데이터 접근 기술 - 활용 방안 (2) | 2024.09.02 |
|---|---|
| QueryDSL : type-safe Query (0) | 2024.08.31 |
| 스프링 데이터 JPA (0) | 2024.08.18 |
| JPA (0) | 2024.08.17 |
| MyBatis (0) | 2024.08.17 |