私は、休止状態でGenericDAOレイヤーを完全に理解して実装しようとしています。私はこの概念に不慣れで、少し読んだり勉強したりしています。GenericDAOレイヤーの実装例について多くの例を見つけましたが、これが最終的な結果です。
public class GenericDAOImpl<T, ID extends Serializable> implements GenericDAO<T, ID> {
private static Logger log = Logger.getLogger(GenericDAOImpl.class.getName());
private SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
public T findById(long id, Class<T> objectClass) {
log.info("Entered GenericDAOImpl findById(" + id +")");
T result = (T) getSessionFactory().getCurrentSession().load(objectClass, id);
if(result != null){
Hibernate.initialize(result);
return result;
}else{
return null;
}
}
public boolean create(T newInstance) {
log.info("Entered GenericDAOImpl create()");
if(newInstance == null){
return false;
}
getSessionFactory().getCurrentSession().saveOrUpdate(newInstance);
return true;
}
public boolean updpate(T updateInstance) {
log.info("Entered GenericDAOImpl updpate()");
if(updateInstance == null){
return false;
}
getSessionFactory().getCurrentSession().update(updateInstance);
return true;
}
public boolean delete(T entity) {
log.info("Entered GenericDAOImpl delete()");
if(entity == null){
return false;
}
getSessionFactory().getCurrentSession().delete(entity);
return true;
}
@SuppressWarnings("unchecked")
public List<T> findByExample(T exampleInstance, Class<T> objectClass){
log.info("Entered GenericDAOImpl findByExample()");
Criteria searchCriteria = getSessionFactory().getCurrentSession().createCriteria(objectClass);
searchCriteria.add(Example.create(exampleInstance));
return (List<T>)searchCriteria.list();
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
これは理論的には機能するはずです(微調整が必要な場合があります)
私の質問は、ジェネリックを使用してservice
、view layer
階層化アーキテクチャのアプローチを「パススルー」できるかどうかです。トランザクションの処理などで、これを実行しても安全かどうかを知るのに十分な休止状態のトランザクションを完全には理解していません...
たとえば、サービスレイヤーの場合はこのようなものかもしれません
public class GenericServiceImpl<T, ID extends Serializable> implements GenericService<T, ID>{
private GenericDAO<T, ID> genericDao;
@Override
public T findById(long id, Class<T> objectClass) {
return this.getGenericDao().findById(id, objectClass);
}
@Override
public boolean create(T newInstance) {
return this.getGenericDao().create(newInstance);
}
@Override
public boolean updpate(T updateInstance) {
return this.getGenericDao().updpate(updateInstance);
}
@Override
public boolean delete(T entity) {
return this.getGenericDao().delete(entity);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public List findByExample(T exampleInstance, Class<T> objectClass) {
return this.getGenericDao().findByExample(exampleInstance, objectClass);
}
public GenericDAO<T, ID> getGenericDao() {
return genericDao;
}
public void setGenericDao(GenericDAO<T, ID> genericDao) {
this.genericDao = genericDao;
}
}
次に、一般的なビューレイヤーも実行できますか?
このアプローチが受け入れられるかどうか、またはこのアプローチに懸念があるかどうかをお知らせください。
よろしくお願いします!