Spring에서 데이터 접근 객체(DAO) 지원은 JDBC, Hibernate또는 JDO를 표준화된 방법으로의 데이터 접근 기술을 가지고 작업하는것을 쉽게 하자는데 가장 큰 목적이 있다. 이것은 이미 언급한 퍼시스턴스 기술간의 교체를 쉽게 하도록 하고 각각의 기술로 명시한 예외에 처리하는 것에 대한 걱정없이 코딩하도록 허락한다.
Spring은 가장 상위 예외처럼 DataAccessException과 함께 자기자신만의 예외구조를 위해 SQLException처럼 예외를 서술하는 기술로부터 편리한 변환을 제공한다. 잘못된것처럼 어떤 정보를 손실하는 위험이 결코 없도록 이런 예외는 원래의 예외를 포장한다.
JDBC 예외에 추가적으로 Spring은 추상화된 런타임 예외의 세트를 위해 Hibernate 특유의 예외를 포장하고 개개인의 것으로 부터 그것들을 변환하고, 예외를 체크할수 있다(이것은 JDO예외에서도 같다). 이것은 괴로운 반복적 catches/throws구문과 예외선언 없이 적절한 레이어에서만 회복될수 없는 대부분의 퍼시스턴스 예외를 다루도록 한다(당신은 여전히 당신이 필요한 어느곳에서든 예외를 잡고 다룰수 있다). 위에서 언급한 것처럼 JDBC예외(DB 정의 dialects)는 같은 구조로 변환한다. 변함없는 프로그래밍 모델내에서 JDBC와 함께 몇몇 작업을 수행할수 있다는 것을 의미한다.
위에서 ORM접근 프레임워크의 다양한 Template-기반 버전을 위해서 참이다. 인터셉터-기반의 클래스를 사용한다면, 애플리케이션은 SessionFactoryUtils의 convertHibernateAccessException 이나 convertJdoAccessException 메소드로 각각 위임되는 HibernateException 와 JDOException를 다루어야만 한다. 이 메소드는 예외를 org.springframework.dao 예외 구조와 호환이 되는 것으로 변환한다. JDOException이 체크되지 않은것 처럼, 그것들은 간단히 던져질수 있다. 예외의 개념에서 일반적인 DAO추상화를 희생한다.
Spring이 사용하는 예외 구조는 다음 그래프내에서 윤곽이 그려진다.
(위 이미지내 상세하게 설명된 클래스 구조가 일부만을 보여주고 있다는 것에 주의하라.)
JDBC, JDO그리고 Hibernate처럼 일관적인 방법으로 다양한 데이터 접근 기술로 좀더 쉽게 작업을 수행하기 위해, Spring은 당신이 확장할수 있는 추상화된 DAO클래스의 세트를 제공한다. 이런 추상화된 클래스들은 데이터 소스와 현재 사용중인 기술을 명시하는 다른 설정상의 셋팅을 제공하는 메소드를 가진다.
DAO지원 클래스:
JdbcDaoSupport - JDBC데이터 접근 객체를 위한 슈퍼클래스(super class), DataSource를 필요로 한다. 이 클래스는 하위 클래스를 위해 제공된 DataSource로부터 초기화된 JdbcTemplate 인스턴스를 제공한다.
HibernateDaoSupport - Hibernate데이터 접근 객체를 위한 슈퍼클래스(super class), SessionFactory 를 필요로 한다. 이 클래스는 하위 클래스를 위해 제공되는 SessionFactory로부터 초기화된 HibernateTemplate 인스턴스를 제공한다. SessionFactory, flush mode, 예외 번역과 같이 나중에 설정된 셋팅을 다시 사용하기 위해, HibernateTemplate을 통해 직접 초기화될수 있다.
JdoDaoSupport - JDO데이터 접근 객체를 위한 슈퍼클래스(super class), PersistenceManagerFactory 를 필요로 한다. 이 클래스는 하위 클래스를 위해 제공된 PersistenceManagerFactory로부터 초기화된 JdoTemplate 인스턴스를 제공한다.
JpaDaoSupport - JPA 데이터 접근 객체를 위한 슈퍼클래스(super class). EntityManagerFactory를 필요로 한다. 이 클래스는 하위 클래스를 위해 제공된 EntityManagerFactory로부터 초기화된 JpaTemplate 인스턴스를 제공한다.