Spring/Spring

[Spring][Data Access] 2. DAO Support

noahkim_ 2024. 8. 11. 12:00

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

  • 관련 데이터베이스 리소스 주입

 

 

 

출처