Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2084519
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: Java

2008-05-18 12:51:19

HibernateDaoSupport支持。具体代码如下。
IGenericDAO接口,这个接口与前一个帖子是一致的:
Java代码 复制代码
  1. public interface IGenericDAO〈T, ID extends Serializable〉 {  
  2.   
  3.     // 通过ID检索对应的实体对象  
  4.     T findById(ID id, boolean lock);  
  5.   
  6.     // 列出所有的实体对象  
  7.     ListT〉 findAll();  
  8.   
  9.     // 通过Example方法检索实体对象  
  10.     ListT〉 findByExample(T exampleInstance);  
  11.   
  12.     // 产生持久化一个实体对象  
  13.     T makePersistent(T entity);  
  14.   
  15.     // 产生一个游离对象  
  16.     void makeTransient(T entity);  
  17. }  

下面是针对IGenericDAO的实现,该类继承自Spring的HibernateDaoSupport,代码如下:
Java代码 复制代码
  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 ListT〉 findAll() {  
  32.         return findByCriteria();  
  33.     }  
  34.   
  35.     @SuppressWarnings("unchecked")  
  36.     public ListT〉 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 ListT〉 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 ListT〉 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的注入:
Java代码 复制代码
  1. "userDao"  
  2.         class="org.rainlife.dao.hibernate.UserDaoHibernate"  
  3.         autowire="byName"/>  

这样就完成了对userDAO的注入。
阅读(1415) | 评论(0) | 转发(0) |
0

上一篇:Java中的泛型

下一篇:接口 java.io.Serializable

给主人留下些什么吧!~~