DAO stands for Data Access Object. This object is call for the interaction with the database. It overrides the create, update and delete functions.
DAO class extends play.utils.dao.BasicDAO
with two type parameters: One for the key type and one for the Model type and overrides the super class constructor with super(Long.class, Sample.class)
Example:
public class SampleDAO extends BasicDAO<Long, Sample> {
public SampleDAO() {
super(Long.class, Sample.class);
}
}
Here the SampleDAO
extends BasicDAO<Long, Sample>
with Long
key type, and Sample
model type.
Note that a @Inject
(javax.inject.Inject) annotation may be required before the constructor definition.
The interest of having DAO objects is that you can override their functions. This is the functions of the DAO that can be overrided :
public interface DAO<K, M> {
List<M> all();
K create(M c);
void remove(K key) throws EntityNotFoundException;
M get(K key);
void update(M c);
void addListener(DAOListener<K, M> l);
Page<M> page(int page, int pageSize, String orderBy);
<F> Page<M> page(int page, int pageSize, String orderBy, String filterField, F filterValue);
Page<M> page(int page, int pageSize, String orderBy, String cacheKey, Expression expression);
void saveAssociation(M c, String association);
}
K being the key type and M the Model type.
Example: Let's say you want to make sure that the randomValue is not higher than 10 before you save it to your database. The code is :
public class SampleDAO extends BasicDAO<Long, Sample> {
public SampleDAO() {
super(Long.class, Sample.class);
}
@Override
public Long create(Sample sam)
{
if(sam.randomValue > 10)
sam = 10;
return super.create(m);
}
}
Alternatively, play.utils.dao.CachedDAO
can be used to cache fetched data.
Classes implementing both BasicDAO
or CachedDAO
should override the constructor with key ad model class type parameters.