?? generichibernatedao.java
字號(hào):
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來實(shí)現(xiàn)通用的DAO接口
*
* @see HibernateDAOFactory
*
* @author galaxy
*/
@SuppressWarnings("hiding")
public class GenericHibernateDAO<T, ID extends Serializable>
implements GenericDAO<T, ID>
{
// 保持實(shí)體對(duì)象類的類型
private Class<T> persistentClass;
/**
* 構(gòu)造方法
*/
public GenericHibernateDAO(Class<T> persistentClass)
{
this.persistentClass = persistentClass;
}
/**
* 得到當(dāng)前線程的Session對(duì)象的實(shí)例
*
* @return
*/
protected Session getSession()
{
return HibernateUtil.getSessionFactory().getCurrentSession();
}
/**
* 得到持久化對(duì)象的類型
*
* @return 持久化類的類型
*/
public Class<T> getPersistentClass()
{
return persistentClass;
}
/**
* 通過ID來得到實(shí)體對(duì)象
*
* @param id 實(shí)體對(duì)象的標(biāo)識(shí)符
* @param lock 使用的鎖模式
* @return 該主鍵值對(duì)應(yīng)的實(shí)體對(duì)象
*/
@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;
}
/**
* 得到所有的實(shí)體對(duì)象
*
* @return 所有的實(shí)體對(duì)象
*/
@SuppressWarnings("unchecked")
public List<T> findAll()
{
return findByCriteria();
}
/**
* 根據(jù)對(duì)象的屬性和屬性的值來得到滿足條件的實(shí)體對(duì)象
*
* @param exampleInstance 查詢的條件
* @return 滿足條件的實(shí)體對(duì)象
*/
@SuppressWarnings("unchecked")
public List<T> findByExample(T exampleInstance)
{
return findByCriteria( Example.create(exampleInstance) );
}
/**
* 將實(shí)體對(duì)象持久化
*
* @param entity 需要進(jìn)行持久化操作的實(shí)體對(duì)象
* @return 持久化的實(shí)體對(duì)象
*/
@SuppressWarnings("unchecked")
public T makePersistent(T entity)
{
getSession().saveOrUpdate(entity);
return entity;
}
/**
* 將實(shí)體對(duì)象變?yōu)樗矐B(tài)
*
* @param entity 需要轉(zhuǎn)變?yōu)樗矐B(tài)的實(shí)體對(duì)象
*/
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();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -