Data Access Layer
The data access layer manages the persistence of the domain model objects.
Five interfaces -
AccountDao,
CategoryDao,
ItemDao,
OrderDao, and
ProductDao -
provide operations as defined by Spring's JPetstore sample application.
The implementation of the case study introduces an additional inteface,
Dao, that contains create/read/update/delete (CRUD) operations.
Dao, a generic class, is extended by each of the other
interfaces, and enables type-safe operations for each subclass.

The data access layer of the case study is implemented using Hibernate
as the object-relational mapping framework.
The design separates general behavior (
AbstractDao)
from Hibernate-specific behavior (the rest of the classes).
AbstractDao implements the CRUD operations and
findAll method, and introduces several abstract
methods to be implemented by framework-specific classes.
AbstractHibernateSpringDao implements several
of these abstract methods suitable for an implementation
using Hibernate with Spring.
The type-specific DAOs (e.g.
AccountDaoHibernate)
implement methods particular to the corresponding interface
(e.g.
AccountDao) as well as abstract methods
left unimplemented by
AbstractHibernateSpringDao.