/**
* DAO基础操作类
*/
package com.hs.ask.dao.impl;
import java.io.Serializable;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.hs.ask.util.Pager;
public abstract class BaseDaoImpl extends HibernateDaoSupport {
protected static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/applicationContext.xml");
protected static SessionFactory sessionFactory = (SessionFactory) applicationContext.getBean("sessionFactory");
Session session = null;
Transaction tran = null;
/**
* 新增对象
* @param object
*/
public Object saveObject(Object object) {
try{
session = sessionFactory.openSession();
tran = session.beginTransaction();
session.save(object);
tran.commit();
return object;
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 修改对象
*/
public void updateObject(Object object) {
try{
session = sessionFactory.openSession();
tran = session.beginTransaction();
session.saveOrUpdate(object);
tran.commit();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 用语句修改对象
*/
public void updateObjectByQuery(final String queryString,
final Object[] parameters) {
try{
session = sessionFactory.openSession();
tran = session.beginTransaction();
Query query = session.createQuery(queryString);
for(int i=0,len=parameters.length;i<len;i++){
query.setParameter(i, parameters[i]);
}
query.executeUpdate();
tran.commit();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 删除对象
*/
public void deleteObject(Object object) {
try{
session = sessionFactory.openSession();
tran = session.beginTransaction();
session.delete(object);
tran.commit();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 根据类型和ID取得一个对象
*/
public Object get(Class clazz,Serializable id){
try{
session = sessionFactory.openSession();
return session.get(clazz, id);
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 根据查询语句获得一个对象
*/
public Object get(final String queryString, final Object[] parameters){
try{
session = sessionFactory.openSession();
tran = session.beginTransaction();
Query query = session.createQuery(queryString);
for(int i=0,len=parameters.length;i<len;i++){
query.setParameter(i, parameters[i]);
}
return query.uniqueResult();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 不带参数查询列表(HQL)
*/
public List find(final String queryString){
try{
session = sessionFactory.openSession();
Query query = session.createQuery(queryString);
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 带参数查询列表(HQL)
*/
public List find(final String queryString, final Object[] parameters){
try{
session = sessionFactory.openSession();
Query query = session.createQuery(queryString);
for(int i=0,len=parameters.length;i<len;i++){
query.setParameter(i, parameters[i]);
}
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 不带参数查询列表(SQL)
*/
public List findBySQL(final String queryString){
try{
session = sessionFactory.openSession();
Query query = session.createSQLQuery(queryString);
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 带参数查询列表(SQL)
*/
public List findBySQL(final String queryString, final Object[] parameters){
try{
session = sessionFactory.openSession();
Query query = session.createSQLQuery(queryString);
for(int i=0,len=parameters.length;i<len;i++){
query.setParameter(i, parameters[i]);
}
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 不带参数查询列表(HQL)
*/
public List findPage(final String queryString,Pager pager){
try{
session = sessionFactory.openSession();
Query query = session.createQuery(queryString);
int count = query.list().size();
pager.setTotalCount(count);
query.setFirstResult((pager.getCurrentPage() - 1) * pager.getPageLimit());
query.setMaxResults(pager.getPageLimit());
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 带参数查询列表(HQL)
*/
public List findPage(final String queryString, final Object[] parameters,Pager pager){
try{
session = sessionFactory.openSession();
Query query = session.createQuery(queryString);
for(int i=0,len=parameters.length;i<len;i++){
query.setParameter(i, parameters[i]);
}
int count = query.list().size();
pager.setTotalCount(count);
query.setFirstResult((pager.getCurrentPage() - 1) * pager.getPageLimit());
query.setMaxResults(pager.getPageLimit());
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 不带参数查询列表(SQL)
*/
public List findPageBySQL(final String queryString,Pager pager){
try{
session = sessionFactory.openSession();
Query query = session.createSQLQuery(queryString);
int count = query.list().size();
pager.setTotalCount(count);
query.setFirstResult((pager.getCurrentPage() - 1) * pager.getPageLimit());
query.setMaxResults(pager.getPageLimit());
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
/**
* 带参数查询列表(SQL)
*/
public List findPageBySQL(final String queryString, final Object[] parameters,Pager pager){
try{
session = sessionFactory.openSession();
Query query = session.createSQLQuery(queryString);
for(int i=0,len=parameters.length;i<len;i++){
query.setParameter(i, parameters[i]);
}
int count = query.list().size();
pager.setTotalCount(count);
query.setFirstResult((pager.getCurrentPage() - 1) * pager.getPageLimit());
query.setMaxResults(pager.getPageLimit());
return query.list();
}catch (HibernateException e) {
throw new HibernateException(e);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
}