Spring JDBC

2025. 6. 13. 09:40spring

반응형

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