SSH实例:基于HibernateDaoSupport的泛型Dao

SSH实例:基于HibernateDaoSupport的泛型Dao

关键字: 泛型dao

例子是根据博友的例子改的。保留原作者名。并留以自用!

(项目:spring2.1 + struts1.2 + hibernate3.2 的文件上传下载,源码请下载附件)

1.1. 基类:扩展HibernateDaoSupport
扩展一下HibernateDaoSupport,可以添加自己的辅助方法,以使下面的泛型实现类代码更简洁清晰。
package com.ssh.core.dao.support;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
@SuppressWarnings("unchecked")
public class HibernateGenericDao extends HibernateDaoSupport {
//……
}

1.2. 接口:GenericDao
定义泛型接口:
package com.ssh.core.dao;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T> {
public void save(Object o);
void delete(Object o);
void deleteById(Serializable id);
public void update(Object o);
public void saveOrUpdate(Object o);

public T getById(Serializable id);
public List<T> findAll(Class<T> entityClass);
public List<T> findByExample(Object o);
//...
}
1.3. 实现:GenericDaoImpl
定义泛型类的实现:
package com.ssh.core.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.springframework.util.Assert;
import com.ssh.core.dao.GenericDao;
import com.ssh.core.dao.support.HibernateGenericDao;

@SuppressWarnings("unchecked")
public class GenericDaoImplHibernate<T> extends HibernateGenericDao implements GenericDao<T>{

protected Class<T> entityClass;

public GenericDaoImplHibernate() {
   entityClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
protected Class<T> getEntityClass() {
   return entityClass;
}
public List<T> findAll(Class<T> entityClass) {
   return getHibernateTemplate().loadAll(entityClass);
}

public List<T> findAll(Class<T> entityClass, String orderBy,
    boolean isAsc) {
   Assert.hasText(orderBy);
   if (isAsc)
    return getHibernateTemplate().findByCriteria(          DetachedCriteria.forClass(entityClass).
addOrder(Order.asc(orderBy)));
   else
    return getHibernateTemplate().findByCriteria(
      DetachedCriteria.forClass(entityClass).
addOrder(Order.desc(orderBy)));
}

public List<T> findByExample(Object o) {
   return getHibernateTemplate().findByExample(o);
}
public T getById(Serializable id) {
   return (T)getHibernateTemplate().get(entityClass, id);
}
public void deleteById(Serializable id) {
   delete(getById(id));
}
public void delete(Object o) {
   getHibernateTemplate().delete(o);
}
public void save(Object o) {
   getHibernateTemplate().save(o);
}
public void saveOrUpdate(Object o) {
   getHibernateTemplate().saveOrUpdate(o);
}
public void update(Object o) {
   getHibernateTemplate().update(o);
}
//其他方法自己加喏,以后有空再补完整
}
1.4. 一个实体的Dao例子
1:接口
package com.ssh.file.dao;
import com.ssh.core.dao.GenericDao;
import com.ssh.model.file.File;
public interface FileDao extends GenericDao<File> {
}
2:类
package com.ssh.file.dao.impl;
import com.ssh.core.dao.impl.GenericDaoImplHibernate;
import com.ssh.file.dao.FileDao;
import com.ssh.model.file.File;

public class FileDaoImpl extends GenericDaoImplHibernate<File> implements FileDao{
//如果需要的方法在GenericDaoImplHibernate中都有的话,这里是可以不写任何代码的
}

posted @ 2008-11-02 20:18  Earl_86  阅读(1756)  评论(0编辑  收藏  举报