You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
BeanPropertySqlParameterSource가 많은 것을 자동화 해주기 때문에 가장 좋아보이지만, BeanPropertySqlParameterSource를 항상 사용할 수 있는 것은 아니다.
예를 들어서 update() 에서는 SQL에 :id를 바인딩 해야 하는데, update()에서 사용하는 ItemUpdateDto에는 ItemId가 없다. 따라서 BeanPropertySqlParameterSource를 사용할 수 없고, 대신에 MapSqlParameterSource를 사용했다.
privateRowMapper<Item> itemRowMapper() {
returnBeanPropertyRowMapper.newInstance(Item.class); //camel 변환 지원
}
BeanPropertyRowMapper 는 ResultSet 의 결과를 받아서 자바빈 규약에 맞추어 데이터를 변환한다.
예를 들어서 데이터베이스에서 조회한 결과가 select id, price 라고 하면 다음과 같은 코드를 작성해준다. (실제로는 리플렉션 같은 기능을 사용한다.)
this.jdbcInsert = new SimpleJdbcInsert(dataSource): 생성자를 보면 의존관계 주입은 dataSource를 받고 내부에서 SimpleJdbcInsert을 생성해서 가지고 있다. 스프링에서는JdbcTemplate 관련 기능을 사용할 때 관례상 이 방법을 많이 사용한다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
5️⃣ JdbcTemplate - 이름 지정 파라미터 1
✅순서대로 바인딩
하지만…. 문제점이 있다. → 변경시점에서 발생한다.
✅ 이름 지정 바인딩
NamedParameterJdbcTemplate라는 이름을 지정해서 파라미터를 바인딩 하는 기능을 제공한다.✅ 위 코드 설명
JdbcTemplateItemRepositoryV2는 ItemRepository 인터페이스를 구현했다.NamedParameterJdbcTemplate도 내부에 dataSource 가 필요하다.JdbcTemplateItemRepositoryV2생성자를 보면 의존관계 주입은dataSource를 받고 내부에서NamedParameterJdbcTemplate을 생성해서 가지고 있다. 스프링에서는JdbcTemplate관련 기능을 사용할 때 관례상 이 방법을 많이 사용한다.NamedParameterJdbcTemplate을 스프링 빈으로 직접 등록하고 주입받아도 된다.✅ sava()
:파라미터이름을 받는 것을 확인할 수 있다.6️⃣ JdbcTemplate - 이름 지정 파라미터 2
✅ 이름 지정 파라미터
파라미터를 전달하려면 Map처럼 key, value 데이터 구조를 만들어서 전달해야 한다.
여기서 key는
:파라미터이름으로 지정한, 파라미터의 이름이고,value는 해당 파라미터의 값이 된다.다음 코드를 보면 이렇게 만든 파라미터(param)를 전달하는 것을 확인할 수 있다.
1️⃣ Map
단순히 Map을 사용한다.
findById() 코드에서 확인
2️⃣MapSqlParameterSource
Map과 유사한다 SQL 타입을 지정할 수 있는 등 SQL에 좀 더 특화된 기능을 제공한다.
SqlParameterSource 인터페이스의 구현체이다.
MapSqlParameterSource는 메서드 체인을 통해 편리한 사용법도 제공한다.
update() 코드에서 확인 가능
3️⃣ BeanPropertySqlParameterSource
자바빈 프로퍼티 규약을 통해서 자동으로 파라미터 객체를 생성한다.
예)
예) getItemName(), getPrice()가 있으면 다음과 같은 데이터를 자동으로 만들어낸다.
SqlParameterSource 인터페이스의 구현체이다.
save(), findAll() 코드에서 확인할 수 있다.
✅ BeanPropertyRowMapper
BeanPropertyRowMapper는ResultSet의 결과를 받아서 자바빈 규약에 맞추어 데이터를 변환한다.예를 들어서 데이터베이스에서 조회한 결과가
select id, price라고 하면 다음과 같은 코드를 작성해준다. (실제로는 리플렉션 같은 기능을 사용한다.)✅ 별칭
7️⃣ JdbcTemplate - 이름 지정 파라미터 3
8️⃣ JdbcTemplate - SimpleJdbcInsert
✅ 코드 설명
JdbcTemplateItemRepositoryV3은 ItemRepository인터페이스를 구현했다.
this.jdbcInsert = new SimpleJdbcInsert(dataSource): 생성자를 보면 의존관계 주입은 dataSource를 받고 내부에서 SimpleJdbcInsert을 생성해서 가지고 있다. 스프링에서는JdbcTemplate 관련 기능을 사용할 때 관례상 이 방법을 많이 사용한다.
물론 SimpleJdbcInsert 을 스프링 빈으로 직접 등록하고 주입받아도 된다.
SimpleJdbcInsert
withTableName : 데이터를 저장할 테이블 명을 지정한다.
usingGeneratedKeyColumns : key 를 생성하는 PK 컬럼 명을 지정한다.
usingColumns : INSERT SQL에 사용할 컬럼을 지정한다. 특정 값만 저장하고 싶을 때 사용한다. 생략할 수 있다.
SimpleJdbcInsert는 생성 시점에 데이터베이스 테이블의 메타 데이터를 조회한다. 따라서 어떤 컬럼이 있는지 확인할 수 있으므로 usingColumns을 생략할 수 있다.
애플리케이션을 실행해보면 SimpleJdbcInsert이 어떤 INSERT SQL을 만들어서 사용하는지 로그로 확인할 수 있다.
✅ save()
jdbcInsert.executeAndReturnKey(param)을 사용해서 INSERT SQL을 실행하고, 생성된 키 값도 매우 편리하게 조회할 수 있다.9️⃣ JdbcTemplate 기능 정리
✅ 주요 기능
JdbcTemplate이 제공하는 주요 기능은 다음과 같다.
JdbcTemplateNamedParameterJdbcTemplate이름 기반 파라미터 바인딩을 지원한다. (권장)
SimpleJdbcInsertSimpleJdbcCall✅JdbcTemplate 사용법 정리
✅ 조회
✅ 변경(INSERT, UPDATE, DELETE)
데이터를 변경할 때는
jdbcTemplate.update()를 사용하면 된다. 참고로int반환값을 반환하는데, SQL 실행 결과에 영향받은 로우 수를 반환한다.등록
✅ 기타 기능
임의의 SQL을 실행할 때는
execute()를 사용하면 된다. 테이블을 생성하는 DDL에 사용할 수 있다.DDL
All reactions