(六)編寫基類BaseDao
在action中繼承了ActionSupport和其它一些公共屬性,如selectedRow等;可能以後還會産生更多公共的内容,是以應該把這些共有的抽取出來,放入到一個基本action中,我們命名為BaseAction,讓它去繼承ActionSupport和其它公共屬性,其它的action隻要繼承它就可以了。
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]; // 擷取第一個類型參數的真實類型
}
posted on 2016-10-03 14:59 Michael2397 閱讀(...) 評論(...) 編輯 收藏