⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generichibernatedao.java

📁 网上考试系统
💻 JAVA
字号:
package cn.hxex.exam.dao.hibernate;

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

import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;

import cn.hxex.exam.dao.GenericDAO;
import cn.hxex.exam.persistence.HibernateUtil;

/**
 * 使用Hibernate API来实现通用的DAO接口
 *
 * @see HibernateDAOFactory
 *
 * @author galaxy
 */
@SuppressWarnings("hiding")
public class GenericHibernateDAO<T, ID extends Serializable> 
			implements GenericDAO<T, ID> 
{
	// 保持实体对象类的类型
    private Class<T> persistentClass;

    /**
     * 构造方法
     */ 
    public GenericHibernateDAO(Class<T> persistentClass) 
    {
        this.persistentClass = persistentClass;
    }

    /**
     * 得到当前线程的Session对象的实例
     * 
     * @return
     */
    protected Session getSession() 
    {
        return HibernateUtil.getSessionFactory().getCurrentSession();
    }

    /**
     * 得到持久化对象的类型
     * 
     * @return 持久化类的类型
     */
    public Class<T> getPersistentClass() 
    {
        return persistentClass;
    }

	/**
	 * 通过ID来得到实体对象
	 * 
	 * @param id 实体对象的标识符
	 * @param lock 使用的锁模式
	 * @return 该主键值对应的实体对象
	 */
    @SuppressWarnings("unchecked")
	public T findById(ID id, boolean lock) 
    {
        T entity;
        if (lock)
            entity = (T) getSession().get(getPersistentClass(), id, LockMode.UPGRADE);
        else
            entity = (T) getSession().get(getPersistentClass(), id);

        return entity;
    }

    /**
     * 得到所有的实体对象
     * 
     * @return 所有的实体对象
     */
    @SuppressWarnings("unchecked")
    public List<T> findAll() 
    {
        return findByCriteria();
    }

    /**
     * 根据对象的属性和属性的值来得到满足条件的实体对象
     * 
     * @param exampleInstance 查询的条件
     * @return 满足条件的实体对象
     */
    @SuppressWarnings("unchecked")
    public List<T> findByExample(T exampleInstance) 
    {
        return findByCriteria( Example.create(exampleInstance) );
    }

    /**
     * 将实体对象持久化
     * 
     * @param entity 需要进行持久化操作的实体对象
     * @return 持久化的实体对象
     */
    @SuppressWarnings("unchecked")
    public T makePersistent(T entity) 
    {
        getSession().saveOrUpdate(entity);
        return entity;
    }

    /**
     * 将实体对象变为瞬态
     * 
     * @param entity 需要转变为瞬态的实体对象
     */
    public void makeTransient(T entity) 
    {
        getSession().delete(entity);
    }

    @SuppressWarnings("unchecked")
    protected List<T> findByCriteria(Criterion... criterion) 
    {
		Criteria crit = getSession().createCriteria(getPersistentClass());
		for (Criterion c : criterion) 
		{
		    crit.add(c);
		}
		return crit.list();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -