泛型 Hibernate DAO 例

泛型 Hibernate DAO 例

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

public interface GenericDAO<T, ID extends Serializable> {
  List<T> findAll();
  T persist(T entity);
  void remove(T entity);

}
=========

import java.io.Serializable;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.LockMode;
import org.hibernate.criterion.Criterion;
import org.hibernate.Criteria;
import java.lang.reflect.ParameterizedType;

public class GenericHibernateDAO<T, ID extends Serializable>
implements GenericDAO<T, ID> {
  private Class<T> persistentClass;
  private Session session;
  public GenericHibernateDAO() {
    this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  }

  public GenericHibernateDAO(Class<T> type) {
      this.persistentClass = type;
  }
  @SuppressWarnings("unchecked")
  public void setSession(Session s) {
    this.session = s;
  }
  protected Session getSession() {
    if (session == null)
    throw new IllegalStateException("Session has not been set on DAO before usage");
      return session;
  }
  public Class<T> getPersistentClass() {
    return persistentClass;
  }

  /* 取实体全集 */
  @SuppressWarnings("unchecked")
  public List<T> findAll() {
    return findByCriteria();
  }
  /**
   * Use this inside subclasses as a convenience method.
   */
  @SuppressWarnings("unchecked")
  protected List<T> findByCriteria(Criterion... criterion) {
    Criteria crit = getSession().createCriteria(getPersistentClass());
    for (Criterion c : criterion) {
      crit.add(c);
    }
    return crit.list();
  }

  /* 保存实体 */
  @SuppressWarnings("unchecked")
  public T persist(T entity) {
    getSession().saveOrUpdate(entity);
    return entity;
  }

  /* 删除实体 */
  public void remove(T entity) {
    getSession().delete(entity);
  }


  public void flush() {
    getSession().flush();
  }
  public void clear() {
    getSession().clear();
  }

}
========

......

GenericHibernateDAO<Book,Integer> _dao =
     new GenericHibernateDAO<Book,Integer>(Book.class);

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值