dagblog.
← Archiv

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);

Verze na Medium

Související články

Související epizody CZ Podcastu