SSH实例:基于HibernateDaoSupport的泛型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中都有的话,这里是可以不写任何代码的
}

 

你可能感兴趣的:(DAO,Hibernate,orm,ssh)