Step 3: Define a Spring DAO Component
Operations on the database will be performed by an instance of a Data Access Object (DAO) that we will define in this step as a Spring MVC component:
- Open the [New Java Class] dialog box by right clicking the guest package node (in the [Package Explorer] window) and selecting New > Class.
- The package name should be guest.
- Enter GuestDao as the class name - use exactly that case sensitive class name.
- Click Finish to create the new DAO Spring component class.
Now replace the content of the new source file with the following code:
package guest; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @Component public class GuestDao { // Injected database connection: @PersistenceContext private EntityManager em; // Stores a new guest: @Transactional public void persist(Guest guest) { em.persist(guest); } // Retrieves all the guests: public List<Guest> getAllGuests() { TypedQuery<Guest> query = em.createQuery( "SELECT g FROM Guest g ORDER BY g.id", Guest.class); return query.getResultList(); } }
The GuestDao
Spring component class defines two methods:
-
persist
- for storing a newGuest
entity object in the database. -
getAllGuests
- for retrieving all the existingGuest
objects from the database.
By using Spring components we can move some work from the application to the Spring Framework. For instance, in this example the Spring container:
- Manages the instantiation of the DAO component class and injects an instance of the DAO component class into the controller, as shown in the next step.
- Prepares an
EntityManager
automatically and injects it into theem
field (because it is annotated with the@PersistenceContext
annotation). - Handles transactions automatically for methods that are annotated with the
@Transactional
annotation, saving the need to wrap every operation that modifies the database (such aspersist
) by transactionbegin
andcommit
.
The next step is adding a Controller Class.