주요 기능
- JdbcTemplate
- 순서 기반 파라미터 바인딩을 지원한다.
- NamedParameterJdbcTemplate
- 이름 기반 파라미터 바인딩을 지원한다. (권장)
- SimpleJdbcInsert
- INSERT SQL을 편리하게 사용할 수 있다.
- SimpleJdbcCall
Data Access
The Data Access Object (DAO) support in Spring is aimed at making it easy to work with data access technologies (such as JDBC, Hibernate, or JPA) in a consistent way. This lets you switch between the aforementioned persistence technologies fairly easily, a
docs.spring.io
JDBC Template 사용법 정리
스프링 JdbcTemplate 사용 방법 공식 메뉴얼
Data Access
The Data Access Object (DAO) support in Spring is aimed at making it easy to work with data access technologies (such as JDBC, Hibernate, or JPA) in a consistent way. This lets you switch between the aforementioned persistence technologies fairly easily, a
docs.spring.io
조회
단건 조회 - 숫자 조회
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 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 actorRowMapper = (resultSet, rowNum) -> {
Actor actor = new Actor();
actor.setFirstName(resultSet.getString("first_name"));
actor.setLastName(resultSet.getString("last_name"));
return actor;
};
public List 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));
'스프링 DB 2편(데이터 접근 활용 기술)' 카테고리의 다른 글
| Ch03. 테스트 - @Transactional, 임베디드 모드 DB, 스프링 부트와 임베디드 모드 (0) | 2022.06.26 |
|---|---|
| Ch03. 테스트 - 데이터베이스 연동, 데이터베이스 분리, 데이터 롤백 (0) | 2022.06.26 |
| Ch02. 스프링 JdbcTemplate - JdbcTemplate(SimpleJdbcInsert) (0) | 2022.06.25 |
| Ch02. 스프링 JdbcTemplate - JdbcTemplate(이름 지정 파라미터) (0) | 2022.06.25 |
| Ch02. 스프링 JdbcTemplate - JdbcTemplate 적용 (0) | 2022.06.25 |