Generické DAO pro Hibernate/JPA
Nečekejte žádnou raketovou vědu, ale jenom takový malý tip ;-). Na pár projektech jsem se setkal s tim, že pro každou entitu bylo ručně vytvořeno a nebo vygenerováno DAO. Většina těchto DAO objektů však obsahovala pouze metody pro CRUD operace (Create, Update, Delete) pro danou entitu. To vedlo k často se opakujícímu kódu, který rozhodně nebyl potřeba. Díky generickým typům zavedeným v Jave 5 můžeme vytvořit generické a typově bezpečné DAO, které bohatě poslouží jako náhrada za původní generované objekty.
public class GenericDAO<E extends Object>{
private Class entityClass;
protected GenericDAO(Class entityClass) {
this.entityClass = entityClass;
}
public E get(Serializable id) {
return (E) getSesion().get(entityClass, id);
}
public void save(E entity) {
getSesion().save(entity);
}
public void update(E entity) {
getSesion().save(entity);
}
public void delete(E entity) {
getSesion().delete(entity);
}
protected Session getSesion() {
return null; //get Hibernate session from somewhere
}
protected Class getEntityClass() {
return entityClass;
}
public static <T extends Object> GenericDAO createGenericDAO(Class clazz) {
GenericDAO dao = new GenericDAO(clazz);
return dao;
}
}
Takto připravené DAO je možné jednoduše používát v kódu.
GenericDAO dao = GenericDAO.createGenericDAO(Dog.class);
Dog dog = dao.get(1);
Související články
Související epizody CZ Podcastu
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi a Filemon o novinkách v Javě 6 a webových frameworcích.
- #1 · Vývojová prostředí v Javě
První díl CZ Podcastu se věnuje vývojovým prostředím pro Javu.