`
hch1011
  • 浏览: 49910 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SSH实例:基于HibernateDaoSupport的泛型Dao

    博客分类:
  • java
阅读更多

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

(项目: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中都有的话,这里是可以不写任何代码的
}

 

  • SSHFileMysql.rar (61.1 KB)
  • 描述: mysql版,说明在lib 下面
  • 下载次数: 700
分享到:
评论
6 楼 luoba 2008-12-10  
学习学习,谢谢了
5 楼 yzl45 2008-11-06  
和springside2.0是一样的!
4 楼 avanry 2008-10-13  
看了,第一个例子导入不了,而且这两个都是用struts1.X做的,不是struts2.0啊
3 楼 jbeduhai 2008-09-19  
不错,谢了!!!
2 楼 qiancaoduwu 2008-09-09  
好像导入工程有点问题?
1 楼 tantec 2008-09-07  
很好,谢谢啦

相关推荐

Global site tag (gtag.js) - Google Analytics