Spring JDBC
2025. 6. 13. 09:40ㆍspring
반응형
Spring JDBC는 Spring Framework에서 JDBC(Java Database Connectivity)를 쉽게 사용할 수 있도록 도와주는 추상화된 데이터 액세스 기술입니다. 복잡하고 반복적인 JDBC 코드를 줄이고, 예외 처리, 연결 해제 등을 자동으로 처리해 줍니다.
🔷 1. Spring JDBC란?
기존 **JDBC(Java Database Connectivity)**는 다음과 같은 코드가 반복됩니다:
- DB 연결(Connection) 생성
- SQL 준비(PreparedStatement)
- 실행 및 결과 처리(ResultSet)
- 예외 처리(try-catch)
- 리소스 해제(close)
이런 반복을 줄이기 위해 Spring에서는 JdbcTemplate 클래스를 제공합니다.
🔷 2. 핵심 클래스: JdbcTemplate
JdbcTemplate은 JDBC 사용을 추상화해서 SQL 실행, 파라미터 바인딩, 결과 매핑, 예외 처리 등을 간단하게 해줍니다.
✅ 주요 기능
- 쿼리 실행 (query, queryForObject, update, 등)
- 트랜잭션 자동 처리 지원
- 리소스 자동 해제
- SQL 예외를 DataAccessException 계열로 추상화
🔷 3. 사용 흐름
✅ 1. 설정 (DataSource 주입)
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new DriverManagerDataSource("jdbc:mysql://localhost:3306/mydb", "user", "password");
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
✅ 2. DAO 작성 예시
@Repository
public class UserDao {
private final JdbcTemplate jdbcTemplate;
public UserDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public User findById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
}
public int insert(User user) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
return jdbcTemplate.update(sql, user.getName(), user.getEmail());
}
}
🔷 4. 주요 메서드 정리
메서드설명
update() | INSERT, UPDATE, DELETE 실행 |
query() | 여러 행 조회 (List 반환) |
queryForObject() | 단일 행/값 조회 (예: COUNT, 단건 조회) |
batchUpdate() | 여러 SQL을 배치로 실행 |
queryForList() | Map 형태로 여러 행 조회 |
🔷 5. 예외 처리
Spring JDBC는 SQL 예외를 모두 DataAccessException의 하위 클래스로 변환합니다. 즉, SQLException을 직접 처리하지 않아도 됩니다.
예:
try {
userDao.insert(user);
} catch (DataAccessException e) {
// 예외 공통 처리
}
6. 트랜잭션 처리
Spring에서는 @Transactional을 사용하여 트랜잭션을 쉽게 관리할 수 있습니다.
@Service
public class UserService {
@Transactional
public void register(User user) {
userDao.insert(user);
sendWelcomeEmail(user); // 중간 실패 시 롤백
}
}
🔚 요약
키워드설명
JdbcTemplate | SQL 실행의 중심 클래스 |
RowMapper | 결과를 객체로 매핑 |
update(), query() | CRUD 메서드 |
DataAccessException | 공통 예외 처리 |
@Transactional | 트랜잭션 선언적 관리 |
반응형
'spring' 카테고리의 다른 글
스프링 JWT(JSON Web Token) 인증 (1) | 2025.06.13 |
---|---|
Spring Security (0) | 2025.06.13 |
스프링 MVC (1) | 2025.06.13 |
스프링 컨테이너 (0) | 2025.06.13 |
AOP (관점 지향 프로그래밍) (0) | 2025.06.13 |