在添加了Hibernate框架的时候用的一个公用的Dao,支持泛型。同时也要创建HibernateSessionFactory。
package dao;
import java.io.Serializable;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
import util.HibernateSessionFactory;
/**
* 公用的HibernateDao
* @author miao
*
*/
public class BaseHibernateDao<T> {
/**
* 获得会话
* @return
*/
public Session getSession() {
return HibernateSessionFactory.getSession();
}
/**
* 关闭会话
*/
public void closeSession() {
HibernateSessionFactory.closeSession();
}
/**
* 根据主键查询
*/
@SuppressWarnings("unchecked")
public T get(Class<T> clz, Serializable id) {
T ret = null;
Session session = this.getSession();
try {
ret = (T) session.get(clz, id);
} catch (HibernateException e) {
e.printStackTrace();
} finally {
closeSession();
}
return ret;
}
/**
* 传HQL语句,并带参数,查询返回一个对象
* @param hql
* @param param
* @return
*/
@SuppressWarnings("unchecked")
public T findEntity(String hql, Object... param) {
Query query = getSession().createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
return (T) query.uniqueResult();
}
/**
* 添加一条记录
* @param entity
*/
public boolean add(T entity) {
boolean success = true;
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.save(entity);
tx.commit();
} catch (HibernateException e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
} finally {
closeSession();
}
return success;
}
/**
* 更新记录
* @param entity
* @return
*/
public boolean update(T entity) {
boolean success = true;
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.update(entity);
tx.commit();
} catch (HibernateException e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
success = false;
} finally {
closeSession();
}
return success;
}
/**
* 得到所有的记录
* @param clz
* @return
*/
@SuppressWarnings("unchecked")
public List<T> getAll(Class<T> clz) {
Session session = getSession();
List<T> items = null;
try {
items = session.createCriteria(clz).list();
} catch (HibernateException e) {
e.printStackTrace();
} finally {
closeSession();
}
return items;
}
/**
* 传HQL语句,并带参数,查询 第二个参数可选
* @param hql
* @param param
* @return
*/
@SuppressWarnings("unchecked")
public List<T> findByHql(String hql, Object... param) {
Query query = getSession().createQuery(hql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
query.setParameter(i, param[i]);
}
}
return query.list();
}
/**
* 删除记录
* @param clz
* @param id
* @return 删除成功返回true,失败则返回false
*/
public boolean delete(Class<T> clz, Serializable id) {
boolean success = true;
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
@SuppressWarnings("unchecked")
T obj = (T) session.get(clz, id);
session.delete(obj);
tx.commit();
} catch (HibernateException e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
success = false;
} finally {
closeSession();
}
return success;
}
/**
* 默认的查询
* @param clazz
* @param condition
* @return
*/
@SuppressWarnings("unchecked")
public List<T> search(Class<T> clazz, T condition) {
Session session = getSession();
List<T> results = null;
try {
results = session.createCriteria(clazz).add(Example.create(condition)).list();
} catch (RuntimeException re) {
re.printStackTrace();
} finally {
closeSession();
}
return results;
}
}