首页 > 代码库 > (六)编写基类BaseDao

(六)编写基类BaseDao

 DAO基类中配备增删改查的操作。

 1 public interface BaseDao<T> { 2     //新增 3     public void save(T entity); 4     //更新 5     public void update(T entity); 6     //根据id删除 7     public void delete(Serializable id); 8     //根据id查找 9     public T findObjectById(Serializable id);10     //查找列表11     public List<T> findObjects();12 }
 1 public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> { 2  3     Class<T> clazz; 4      5     public BaseDaoImpl(){ 6         ParameterizedType pt =  (ParameterizedType) this.getClass().getGenericSuperclass(); //BaseDaoImpl<user> 7         clazz = (Class<T>) pt.getActualTypeArguments()[0]; 8     } 9     10     public void save(T entity) {11         getHibernateTemplate().save(entity);12         13     }14 15     public void update(T entity) {16         getHibernateTemplate().update(entity);17         18     }19 20     public void delete(Serializable id) {21         getHibernateTemplate().delete(findObjectById(id));22         23     }24 25     public T findObjectById(Serializable id) {26         27         return getHibernateTemplate().get(clazz,id);28     }29 30     public List<T> findObjects() {31         Query query = getSession().createQuery("FROM "+clazz.getSimpleName());32         return query.list();33     }34     35 }

获取泛型类型:

                   // 使用反射得到T的真实类型

                   ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的 泛型的父类 类型

                   this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型

         }

(六)编写基类BaseDao