Spring 프레임워크에서 데이터베이스를 다루는 방법은 여러 가지가 있다.
그 중에서도 JdbcTemplate은 JDBC를 한층 더 추상화하여 개발자가 더 쉽게 데이터베이스에 접근할 수 있도록 도와주는 Spring의 핵심 컴포넌트이다.
JdbcTemplate이 뭘까?
JdbcTemplate은 Spring Framework에서 제공하는 JDBC 추상화 클래스이다.
전통적인 JDBC의 모든 기능을 그대로 사용할 수 있으면서도, 반복적이고 복잡한 JDBC 코드를 대폭 줄여주는 장점이 있다.
기존 JDBC의 try-catch 문과 같은 예외처리, Connection 객체 관리, PreparedStatement 처리 등을 JdbcTemplate이 자동으로 처리해주기 때문에 개발자는 SQL 쿼리 작성과 결과 매핑에만 집중할 수 있다는 장점도 있다.
JdbcTemplate 설정해보기
1. 먼저 의존성을 추가해야 한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
이 의존성은 Spring Boot 프로젝트에서 JDBC 관련 기능을 사용할 수 있게 해준다.
2. 다음으로 DataSource 설정이 필요하다.
@Configuration
public class DatabaseConfig {
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
이 설정으로 스프링 컨테이너는 JdbcTemplate 빈을 생성하고 관리하게 된다.
JdbcTemplate 기본 사용법
1. 조회 쿼리 실행하기
단일 결과 조회:
String sql = "SELECT name FROM users WHERE id = ?";
String name = jdbcTemplate.queryForObject(sql, String.class, userId);
이 코드는 특정 ID를 가진 사용자의 이름을 조회하는 예시이다.
queryForObject는 단일 결과를 반환할 때 사용한다.
여러 결과 조회:
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
query 메서드는 여러 행을 조회할 때 사용하며,
BeanPropertyRowMapper를 통해 결과를 자동으로 객체로 매핑한다고 보면된다.
*복잡한 객체 매핑을 위해 RowMapper도 구현 할 수 있다!*
public class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getLong("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
return user;
}
}
// 위 구현한 RowMapper를 쿼리에서 사용하는 예시
String sql = "SELECT * FROM users WHERE id = ?";
User user = jdbcTemplate.queryForObject(sql, new UserRowMapper(), userId);
2. 데이터 수정하기
String sql = "UPDATE users SET name = ? WHERE id = ?";
int updatedRows = jdbcTemplate.update(sql, newName, userId);
update 메서드는 INSERT, UPDATE, DELETE 쿼리를 실행할 때 사용되며, 영향받은 행의 수를 반환한다.
'Spring' 카테고리의 다른 글
[Spring] JPA와 Spring Data JPA가 뭘까??? (0) | 2025.01.20 |
---|---|
[Spring] MyBatis 개념정리 🤩 (0) | 2025.01.20 |
[Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎 (2) | 2025.01.20 |
[Spring] Controller의 Return Type과 Parameter 가이드 👍 (1) | 2025.01.20 |
[Spring] Spring Singleton Pattern과 주요 어노테이션 정리 ✅ (0) | 2025.01.20 |