泛型DAO的设计模式

(一)首先定义DAO接口IGenericDAO,该接口定义了共同的CRUD操作:

public interface IGenericDAO<T,PK extends Serializable>{

              public T findById(PK id) ;

              public List<T> findAll() ;

              public T save(T entity) ;

              public void delete(T entity) ;

             public void update(T entity) ;

}

(二)针对IGenericDAO接口的Hibernate实现,完成通用的CRUD操作

public class GenericDaoHibernate<T,PK extends Serializable> implements IGenericDAO<T,PK>{

              private Class<T> clazz ;

              private Session session ;

              public GenericDaoHibernate(){}

              public T findById(PK id) {

                    return (T)session.get(clazz,id) ;

            }

              public List<T> findAll() {

                       Query query = session.createQuery("from "+clazz.getName()) ;

                       return query.list() ;

            }

              public T save(T entity) {

                        return (T)session.save(entity) ;

 

            }

              public void delete(T entity) {

                      session.delete(entity) ;

           }

              public void update(T entity) {

                       session.update(entity) ;

          }

}

 

(三)举例定义一个IUserDAO接口,该接口继承IGenericDAO

public interface IUserDAO  extends IGenericDAO〈User,Integer〉{

       public User findByName(String username);

}

(四)针对IUserDAO 的Hibernate实现UserDAOHibernate

public class UserDAOHibernate extends GenericDaoHibernate<User,Integer> implements IUserDAO{

..............

}

 

 

/* 如何得到泛型的class */

this.clazz = (Class) ((ParameterizedType) getClass()  

               .getGenericSuperclass()).getActualTypeArguments()[0];  

你可能感兴趣的:(设计模式)