[Spring] 스프링 DB 2편 2-9. JdbcTemplate 기능 정리

강우엉·2023년 8월 29일

Spring

목록 보기
297/359

주요 기능
JdbcTemplate이 제공하는 주요 기능은 다음과 같다.

  • JdbcTemplate
    • 순서 기반 파라미터 바인딩을 지원한다.
  • NamedParameterJdbcTemplate
    • 이름 기반 파라미터 바인딩을 지원한다. (권장)
  • SimpleJdbcInsert
    • INSERT SQL을 편리하게 사용할 수 있다.
  • SimpleJdbcCall
    • 스토어드 프로시저를 편리하게 호출할 수 있다.

조회

단건 조회 - 숫자 조회

int rowCount = jdbcTemplate.queryForObject("select count(*) from t_actor", Integer.class);

하나의 로우를 조회할 때는 queryForObject() 를 사용하면 된다. 지금처럼 조회 대상이 객체가 아니라 단순 데이터 하나라면 타입을 Integer.class , String.class 와 같이 지정해주면 된다.

단건 조회 - 숫자 조회, 파라미터 바인딩

int countOfActorsNamedJoe = jdbcTemplate.queryForObject(
 "select count(*) from t_actor where first_name = ?", Integer.class,
"Joe");

숫자 하나와 파라미터 바인딩 예시이다.

단건 조회 - 문자 조회

String lastName = jdbcTemplate.queryForObject(
 "select last_name from t_actor where id = ?",
 String.class, 1212L);

문자 하나와 파라미터 바인딩 예시이다.

단건 조회 - 객체 조회

Actor actor = jdbcTemplate.queryForObject(
 "select first_name, last_name from t_actor where id = ?",
 (resultSet, rowNum) -> {
 Actor newActor = new Actor();
 newActor.setFirstName(resultSet.getString("first_name"));
 newActor.setLastName(resultSet.getString("last_name"));
 return newActor;
 },
 1212L);

객체 하나를 조회한다. 결과를 객체로 매핑해야 하므로 RowMapper 를 사용해야 한다. 여기서는 람다를 사용했다.

목록 조회 - 객체

List<Actor> actors = jdbcTemplate.query(
 "select first_name, last_name from t_actor",
 (resultSet, rowNum) -> {
 Actor actor = new Actor();
 actor.setFirstName(resultSet.getString("first_name"));
 actor.setLastName(resultSet.getString("last_name"));
 return actor;
 });

여러 로우를 조회할 때는 query() 를 사용하면 된다. 결과를 리스트로 반환한다. 결과를 객체로 매핑해야 하므로 RowMapper 를 사용해야 한다. 여기서는 람다를 사용했다.

목록 조회 - 객체

private final RowMapper<Actor> actorRowMapper = (resultSet, rowNum) -> {
 Actor actor = new Actor();
 actor.setFirstName(resultSet.getString("first_name"));
 actor.setLastName(resultSet.getString("last_name"));
 return actor;
};
public List<Actor> findAllActors() {
 return this.jdbcTemplate.query("select first_name, last_name from t_actor",
actorRowMapper);
}

여러 로우를 조회할 때는 query() 를 사용하면 된다. 결과를 리스트로 반환한다.
여기서는 RowMapper 를 분리했다. 이렇게 하면 여러 곳에서 재사용 할 수 있다.

변경(INSERT, UPDATE, DELETE)

데이터를 변경할 때는 jdbcTemplate.update() 를 사용하면 된다. 참고로 int 반환값을 반환하는데, SQL 실행 결과에 영향받은 로우 수를 반환한다.

등록

jdbcTemplate.update(
 "insert into t_actor (first_name, last_name) values (?, ?)",
 "Leonor", "Watling");

수정

jdbcTemplate.update(
 "update t_actor set last_name = ? where id = ?",
 "Banjo", 5276L);

삭제

jdbcTemplate.update(
 "delete from t_actor where id = ?",
 Long.valueOf(actorId));

기타 기능
임의의 SQL을 실행할 때는 execute() 를 사용하면 된다. 테이블을 생성하는 DDL에 사용할 수 있다.

DDL

jdbcTemplate.execute("create table mytable (id integer, name varchar(100))");

스토어드 프로시저 호출

jdbcTemplate.update(
 "call SUPPORT.REFRESH_ACTORS_SUMMARY(?)",
 Long.valueOf(unionId));
profile
우엉이의 코딩 성장일기💻

0개의 댓글