注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

骇客归来

ぁ枫あ

 
 
 

日志

 
 

Spring与范型DAO类的结合   

2007-06-13 23:19:13|  分类: Spring |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前一阵子发了一篇Hibernate官网上面的一个范型DAO类支持的笔记,只是这个DAO类是基于Hibernate的实现,最近在项目中也参考了这个实现,并且与Spring结合在一起,加入了Spring的HibernateDaoSupport支持。具体代码如下。

IGenericDAO接口,这个接口与前一个帖子是一致的:

代码

  1. public interface IGenericDAO〈T, ID extends Serializable〉 {   
  2.   
  3.     // 通过ID检索对应的实体对象   
  4.     T findById(ID id, boolean lock);   
  5.   
  6.     // 列出所有的实体对象   
  7.     List〈T〉 findAll();   
  8.   
  9.     // 通过Example方法检索实体对象   
  10.     List〈T〉 findByExample(T exampleInstance);   
  11.   
  12.     // 产生持久化一个实体对象   
  13.     T makePersistent(T entity);   
  14.   
  15.     // 产生一个游离对象   
  16.     void makeTransient(T entity);   
  17. }   

下面是针对IGenericDAO的实现,该类继承自Spring的HibernateDaoSupport,代码如下:

代码

  1. public abstract class GenericDAOHibernate〈T, ID extends Serializable, DAOImpl extends IGenericDAO〈T, ID〉〉   
  2.         extends HibernateDaoSupport implements IGenericDAO〈T, ID〉 {   
  3.     private Class〈T〉 persistentClass;   
  4.   
  5.     public GenericDAOHibernate() {   
  6.         this.persistentClass = (Class〈T〉) ((ParameterizedType) getClass()   
  7.                 .getGenericSuperclass()).getActualTypeArguments()[0];   
  8.     }   
  9.   
  10.     public Class〈T〉 getPersistentClass() {   
  11.         return persistentClass;   
  12.     }   
  13.   
  14.     @SuppressWarnings("unchecked")   
  15.     public T findById(ID id) {   
  16.         return (T) getHibernateTemplate().load(getPersistentClass(), id);   
  17.     }   
  18.   
  19.     @SuppressWarnings("unchecked")   
  20.     public T findById(ID id, boolean lock) {   
  21.         T entity;   
  22.         if (lock)   
  23.             entity = (T) getHibernateTemplate().load(getPersistentClass(), id,   
  24.                     LockMode.UPGRADE);   
  25.         else  
  26.             entity = findById(id);   
  27.   
  28.         return entity;   
  29.     }   
  30.   
  31.     public List〈T〉 findAll() {   
  32.         return findByCriteria();   
  33.     }   
  34.   
  35.     @SuppressWarnings("unchecked")   
  36.     public List〈T〉 findByExample(T exampleInstance) {   
  37.         DetachedCriteria detachedCrit = DetachedCriteria   
  38.                 .forClass(getPersistentClass());   
  39.         Example example = Example.create(exampleInstance);   
  40.         detachedCrit.add(example);   
  41.         return getHibernateTemplate().findByCriteria(detachedCrit);   
  42.     }   
  43.   
  44.     @SuppressWarnings("unchecked")   
  45.     public List〈T〉 findByExample(T exampleInstance, String[] excludeProperty) {   
  46.         DetachedCriteria detachedCrit = DetachedCriteria   
  47.                 .forClass(getPersistentClass());   
  48.         Example example = Example.create(exampleInstance);   
  49.         for (String exclude : excludeProperty) {   
  50.             example.excludeProperty(exclude);   
  51.         }   
  52.         detachedCrit.add(example);   
  53.         return getHibernateTemplate().findByCriteria(detachedCrit);   
  54.     }   
  55.   
  56.     public T makePersistent(T entity) {   
  57.         getHibernateTemplate().saveOrUpdate(entity);   
  58.         return entity;   
  59.     }   
  60.   
  61.     public void makeTransient(T entity) {   
  62.         getHibernateTemplate().delete(entity);   
  63.     }   
  64.   
  65.     @SuppressWarnings("unchecked")   
  66.     protected List〈T〉 findByCriteria(Criterion... criterion) {   
  67.         DetachedCriteria detachedCrit = DetachedCriteria   
  68.                 .forClass(getPersistentClass());   
  69.         for (Criterion c : criterion) {   
  70.             detachedCrit.add(c);   
  71.         }   
  72.         return getHibernateTemplate().findByCriteria(detachedCrit);   
  73.     }   
  74. }   

实际上这个GenericDAOHibernate类还是比较简单的,主要通过Spring的getHibernateTemplate()方法来实现通用的CRUD操作。

在上一个帖子中有朋友问到,使用了范型的DAO类后,如何通过Spring来注入这个DAO类,实际上,注入DAO类与不使用范型是一样的,比如说对于上一个帖子的UserDAOHibernate的注入:

代码

  1. <bean id="userDao"  
  2.         class="org.rainlife.dao.hibernate.UserDaoHibernate"  
  3.         autowire="byName"/>   

这样就完成了对userDAO的注入。

  评论这张
 
阅读(162)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017