Spring은 다양한 데이터 접근 기술을 일관된 방식으로 사용할 수 있도록 도와줍니다
1. Consistent Exception Hierarchy
- 각 기술별로 발생하는 예외들을 Spring의 예외 계층인 DataAccessException으로 통일
기술 | 원래 예외 | 변환된 예외 (Spring) |
JDBC | SQLException | DataAccessException (예: CannotGetJdbcConnectionException, BadSqlGrammarException) |
JPA (Hibernate 포함) |
PersistenceException | DataAccessException (예: JpaSystemException, DataIntegrityViolationException) |
MyBatis | PersistenceException | DataAccessException |
ORM | ORM별 예외 |
DataAccessException
|
장점
- 일관된 방식으로 예외 처리
- 예외가 발생했을 때, 원래 예외에 대한 정보를 잃지 않음
2. @Repository
- Spring에서 DAO나 Repository 클래스를 빈으로 정의할 때 사용
- Spring이 자동으로 예외를 변환해줌
예제) Jdbc
더보기
1. 존재하지 않는 테이블 접근
@Repository
public class MemberRepository {
..
public String badSqlGrammer(int id) {
return jdbcTemplate.queryForObject("SELECT username FROM member1 WHERE id = "+id, String.class);
}
}
- JDBC의 SQLSyntaxErrorException 예외 발생
2. 예외 통합
Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SELECT username FROM member1 WHERE id = 1]
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:101)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1538)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:393)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:465)
- DataAccessException의 서브클래스로 포장되어 던져짐 (BadSqlGrammarException)
3. Dependency Injection
- 관련 데이터베이스 리소스 주입
출처