`

Hibernate通用的baseDao

阅读更多
IBaseDao
/**
 * 
 */

package zhenjw.hibernate.dao;

import java.util.Collection;
import java.util.List;

import org.hibernate.Session;

/**
 * @author zhenjw
 * 
 */
public interface IBaseDao {

	/**
	 * 功能:获得数据库连接的Session
	 * 
	 * @return Session
	 */
	public Session getSession();

	/**
	 * 功能:根据hql语句得到记录总数
	 * 
	 * @param strhql
	 * @return int
	 */
	public int getTotalCount(String strhql);

	/**
	 * 功能:根据sql语句得到记录总数
	 * 
	 * @param strsql
	 * @return int
	 */
	public int getTotalCountBySql(String strsql);

	/**
	 * 功能:根据hql语句得到记录总数
	 * 
	 * @param strhql
	 * @param obj
	 * @return int
	 */
	public int getTotalCount(String strhql, Object obj);
	
	 
	/**
	 * 功能:根据hql语句得到记录总数
	 * @param strhql
	 * @param params
	 * @return int
	 */
	public int getTotalCount(String strhql, List params);
	
	/**
	 * 功能:根据sql语句得到记录总数
	 * @param strsql
	 * @param param
	 * @return
	 */
	public int getTotalCountBySql(String strsql, List params);
	
	 
	 
	/**
	 * 功能:增加记录
	 * 
	 * @param entity
	 */
	public void create(Object entity);

	/**
	 * 功能:修改记录
	 * 
	 * @param entity
	 */
	public void update(Object entity);

	/**
	 * 功能:删除记录
	 * 
	 * @param entity
	 */
	public void delete(Object entity);

	/**
	 * 功能:删除数据
	 * 
	 * @param clazz
	 * @param id
	 */
	public void delete(Class clazz, long id);

	/**
	 * 功能:批量删除数据
	 * 
	 * @param clazz
	 * @param id
	 */
	public void batchDelete(Class clazz, long[] id);

	/**
	 * 功能:删除表中的所有的记录
	 * 
	 * @param clazz
	 */
	public void deleteAll(Class clazz);

	/**
	 * 功能:删除记录集中的所有的记录
	 * 
	 * @param entities
	 */
	public void deleteAll(Collection entities);;

	/**
	 * 功能:通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */

	public Object getByPk(Class clazz, int id);

	/**
	 * 功能:通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */
	public Object getByPk(Class clazz, long id);

	/**
	 * 功能:通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */
	public Object getByPk(Class clazz, String id);

	/**
	 * 功能:通过关键字和值来进行查询
	 * 
	 * @param clazz
	 * @param keyName
	 * @param keyValue
	 * @return 得到的Object是List
	 */
	public Object loadByPk(Class clazz, String keyName, Object keyValue);

	/**
	 * 功能:根据hql查询记录
	 * 
	 * @param strhql
	 * @return List
	 */
	public List find(String strhql);

	/**
	 * 功能:根据hql查询记录
	 * 
	 * @param strhql
	 * @param param
	 * @return List
	 */
	public List find(String strhql, Object param);

	/**
	 * 功能:根据hql查询记录
	 *  
	 * @param strhql
	 * @param name
	 * @param param
	 * @return List
	 */
	public List findByNamedParam(String strhql, String name, Object param);

	
	/**
	 * 功能:SQL查询
	 * @param strsql
	 * @return
	 */
	public List findBySql(String strsql);
	
	/**
	 * 功能:查询符合条件的记录。
	 * @param strsql
	 * @param params
	 * @return
	 */
	public List findBySql(String strsql,List params);  
  
	/**
	 * 功能:分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strhql
	 * @return List
	 */
	public List query(int pageNo, int pageSize, String strhql);

	/**
	 * 功能:分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param queryString
	 * @param obj
	 * @return List
	 */
	public List query(int pageNo, int pageSize, String strhql, Object obj);
	
	
	/**
	 * 功能:分页查询
	 * @param pageNo
	 * @param pageSize
	 * @param strhql
	 * @param params
	 * @return
	 */
	public List query(int pageNo, int pageSize, String strhql, List params );

 
	
	/**
	 * 功能:分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strsql
	 * @return List
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql); 

	/**
	 * 功能:分页查询
	 * @param pageNo
	 * @param pageSize
	 * @param strsql
	 * @param params
	 * @return
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql, List params) ;
	
	 
	/**
	 * 功能:执行SQL语句,主要是更新与删除记录的SQL语句,不需要返回值的
	 * 
	 * @param strsql
	 */
	public void excuteSql(String strsql);
	
}



BaseDao


/**
 * 
 */
package zhenjw.hibernate.dao;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import zhenjw.hibernate.HibernateSessionFactory;


/**
 * @author zhenjw
 *
 */
public class BaseDao implements IBaseDao {
	
	private Logger logger = Logger.getLogger(this.getClass());

	// private Messages Messages=new Messages();

	private String databeaseError = Messages
			.getString("BaseDao.databeaseError");

	private SessionFactory sessionFactory;
	

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#batchDelete(java.lang.Class, long[])
	 */
	public void batchDelete(Class clazz, long[] id) {
		// TODO Auto-generated method stub
		
		String strId = "";
		
		for (int i = 0; i < id.length; i++) {
			
			if (i > 0)
				
				strId += ", " + id[i];
			
			else
				
				strId = "" + id[i];
			
		}
		logger.debug("batchDelete(Class, long[])  id[]={" + strId + "}");
		
		for (int i = 0; i < id.length; i++) {
			
			this.delete(clazz, id[i]);
			
		}


	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#create(java.lang.Object)
	 */
	public void create(Object entity) {
		// TODO Auto-generated method stub
		
		Session session = null;
		
		Transaction tr = null;
		
		boolean commitflag=false;
		
		try {
			session = this.getSession();
			
			tr = session.beginTransaction(); 
			
			session.save(entity);
			
			tr.commit();
			
			commitflag=true;
			
			session.flush();
			
			session.clear();
			
			// super.getHibernateTemplate().save(entity);
			
			logger.debug("保存" + entity.getClass().getName() + " 的实例到数据库成功!");

		} catch (Exception e) { 
			
				
			String error = Messages.getString("BaseDao.create.saveError");
			
			logger.debug("保存" + entity.getClass().getName() + " 的实例到数据库 ,"
						+ error, e);
			
			e.printStackTrace();
			
			throw new DaoException(error);
			
		} finally {
			
			if(!commitflag)
			{
				try{
					
					if (tr != null)
						
						tr.rollback();
					
				}catch(Exception e1)
				{
						
					logger.debug("事务",e1);
					
				}
			}
			
			this.closeSession(session);

		}


	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#delete(java.lang.Object)
	 */
	public void delete(Object entity) {
		// TODO Auto-generated method stub
		
		logger.debug("delete(Object) entity.class="
				+ entity.getClass().getName()); 
		
		Session session = null;
		
		Transaction tr = null;
		
		boolean commitflag=false;
		
		try {

			session = this.getSession();
			
			tr = session.getTransaction();
			
			tr.begin();
			
			session.delete(entity);
			
			tr.commit();
			
			commitflag=true;
			
			session.flush();
			
			session.clear();

		} catch (Exception e) {
			
			if (tr != null)
				
				tr.rollback();
			
			String Error = Messages.getString("BaseDao.delete.Error");

			logger.debug(Error + " Class=" + entity.getClass().getName(), e);
			
			throw new DaoException(Error);
		} finally {
			
			if(!commitflag)
			{
				try
				{
					if (tr != null)
						
						tr.rollback();
					
				}catch(Exception e)
				{
					e.printStackTrace();
				}
			}
			
			this.closeSession(session);
			
		}

	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#delete(java.lang.Class, long)
	 */
	public void delete(Class clazz, long id) {
		// TODO Auto-generated method stub
		
		logger.debug("ClassName=" + clazz.getName() + "  ,id=" + id);
		
		try {

			Object entity = this.getByPk(clazz, id);
			
			if (entity != null)
				
				this.delete(entity);
			
			else
				
				logger.debug(clazz.getName() + " 的关键字为 " + id + "  的对象不存在 ");

		} catch (Exception e) {
			
			logger.debug("  delete(Class, long)  excute is error  . Error="
					+ e.toString());
			
			throw new DaoException(Messages.getString("BaseDao.delete.Error"));

		}

	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#deleteAll(java.lang.Class)
	 */
	public void deleteAll(Class clazz) {
		// TODO Auto-generated method stub
		
		logger.debug("deleteAll(Class) ClassName=" + clazz.getName()); 
		
		Session session = null;
		
		Transaction tr = null;
		
		boolean commitflag=false;

		try {
						
			session = this.getSession();
			
			tr = session.beginTransaction();
			
			Query query = session.createQuery(" delete   from "
					+ clazz.getName());
			
			query.executeUpdate();
			
			tr.commit();
			
			commitflag=true;
			
			session.flush();
			
		} catch (Exception e) { 
			
			String Error = Messages.getString("BaseDao.delete.Error");
			
			logger.debug("从数据库中删除" + clazz.getName() + "的所有实例失败!", e);
			
			throw new DaoException(Error);
			
		} finally {
			
			if(!commitflag)
			{
				try
				{
					if (tr != null)
						
						tr.rollback();
					
				}catch(Exception e)
				{
					e.printStackTrace();
				}
			}
			
			this.closeSession(session);
			
		}

	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#deleteAll(java.util.Collection)
	 */
	public void deleteAll(Collection entities) {
		// TODO Auto-generated method stub
		
		Session session = null;
		
		Transaction tr = null;
		
		boolean commitflag=false;
		
		try {
			
			session = this.getSession();
			
			tr = session.beginTransaction();
			
			Iterator ite = entities.iterator();
			

			while (ite.hasNext())
				
				session.delete(ite.next());
			
			// super.getHibernateTemplate().deleteAll(entities);
			tr.commit();
			
			commitflag=true;
			
			session.flush();
			

		} catch (Exception e) { 
			
			String error = Messages.getString("BaseDao.deleteAll.Error");
			
			logger.debug(error, e);
			
			throw new DaoException(error);
			
		} finally {
			
			if(!commitflag)
			{
				try
				{
					if (tr != null)
						
						tr.rollback();
					
				}catch(Exception e)
				{
					e.printStackTrace();
				}
			}
			
			this.closeSession(session);
			
		}
		
		

	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#excuteSql(java.lang.String)
	 */
	public void excuteSql(String strsql) {
		// TODO Auto-generated method stub
		
		logger.debug("excuteSql(String) strsql=" + strsql);
		
		Session session = null;
		
		Transaction tr = null;
		
		boolean commitflag=false;
		
		try {
			
			session = this.getSession();
			
			tr = session.beginTransaction();
			
			SQLQuery query = session.createSQLQuery(strsql);
			
			
			query.executeUpdate();
			
			tr.commit();
			
			commitflag=true;
			
			session.flush();
			
			// super.getHibernateTemplate().update(entity);

		} catch (Exception e) {
			
			 
			
			String Error = Messages.getString("BaseDao.excuteSql.Error");
			
			logger.debug(Error, e);
			
			throw new DaoException(Error);
			
		} finally {
			
			if(!commitflag)
			{
				try
				{
					if (tr != null)
						
						tr.rollback();
					
				}catch(Exception e)
				{
					e.printStackTrace();
				}
			}
			
			this.closeSession(session);
			
		}
 
		

	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#find(java.lang.String)
	 */
	public List find(String strhql) {
		// TODO Auto-generated method stub
		
		List result = null;
		
		logger.debug("find(String) queryString=" + strhql);
		
		Session session = null;
		
		try {
			
			// result = super.getHibernateTemplate().find(queryString);
			
			session = this.getSession();
			
			Query query = session.createQuery(strhql);
			
			result = query.list();

		} catch (Exception e) {
			
			logger.debug("执行数据库中查询时失败,语句为:" + strhql, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result; 
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#find(java.lang.String, java.lang.Object)
	 */
	public List find(String strhql, Object param) {
		// TODO Auto-generated method stub
		
		logger.debug("find(String, Object) queryString=" + strhql
				+ " ,param=" + param);

		List result = null;
		
		Session session = null;
		
		try {

			session = this.getSession();
			
			Query query = session.createQuery(strhql);
			
			query.setParameter(0, param);
			
			result = query.list();

			// result = super.getHibernateTemplate().find(queryString, param);

		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);

		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
		 
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#findByNamedParam(java.lang.String, java.lang.String, java.lang.Object)
	 */
	public List findByNamedParam(String strhql, String name, Object param) {
		// TODO Auto-generated method stub


		logger.debug("findByNamedParam(String, String, Object) strhql="
				+ strhql + "name=" + name + " ,param=" + param);

		List result = null;
		
		Session session = null;
		
		try {
			session = this.getSession();
			
			Query query = session.createQuery(strhql);
			
			query.setParameter(name, param);
			
			result = query.list();

			// result =
			// super.getHibernateTemplate().findByNamedParam(queryString,
			// name, param);

		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);

		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#findBySql(java.lang.String)
	 */
	public List findBySql(String strsql) {
		// TODO Auto-generated method stub
		
		logger.debug("exceuteSQL(String) strsql=" + strsql);
		
		System.out.println(strsql);
		
		Session session = null;
		
		List result=null;
		
		
		try {
			
			session = this.getSession(); 
			
			SQLQuery query = session.createSQLQuery(strsql);
			
			result=query.list();
			
			// super.getHibernateTemplate().update(entity);

		} catch (Exception e) { 
			
			String Error = Messages.getString("BaseDao.exceuteSQL.Error");
			
			logger.debug(Error, e);
			
			throw new DaoException(Error);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#findBySql(java.lang.String, java.util.List)
	 */
	public List findBySql(String strsql, List params) {
		// TODO Auto-generated method stub

		String paramnameArray=""; 
		 
		if(params!=null)
		{
			
			for (int i = 0; i < params.size(); i++) {
					
					if (i > 0)
						
						paramnameArray += " , " + params.get(i);
					
					else
						
						paramnameArray = ""+params.get(i);
					
			}
		
		}
		
		logger.debug("excuteSql(String, List) strsql="+strsql+" , List="+paramnameArray);
		
		System.out.println(strsql);
		
		List result =null;
		
		Session session = null;
		
		try { 
			
			session = this.getSession();
			
			
			SQLQuery query = session.createSQLQuery(strsql);
			
			if(params!=null)
			{
				for (int i = 0; i < params.size(); i++) {
										
					query.setParameter(i, params.get(i));
					
				} 
			}
			
			result  = query.list();

		} catch (Exception e) {
			
			String error = Messages.getString("BaseDao.findBySql.Error");
			
			logger.debug(error, e);
			
			e.printStackTrace();
			
			throw new DaoException(error);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;  
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getByPk(java.lang.Class, int)
	 */
	public Object getByPk(Class clazz, int id) {
		// TODO Auto-generated method stub


		logger.debug("getByPk(Class, Integer) class=" + clazz.getName()
				+ " , ID=" + id);
		
		Object result = null;
		
		Session session = null;
		
		try {
			
			session = this.getSession();
			
			result = session.get(clazz, new Integer(id));			

		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}

		return result;
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getByPk(java.lang.Class, long)
	 */
	public Object getByPk(Class clazz, long id) {
		// TODO Auto-generated method stub

		logger.debug("getByPk(Class, Long) Class=" + clazz.getName() + ",id="
				+ id);
		
		Object result = null;
		
		Session session = null;
		
		try {
			session = this.getSession();
			
			result = session.get(clazz, new Long(id));
			
			// (Object) super.getHibernateTemplate().get(clazz, id);

		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}

		return result;
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getByPk(java.lang.Class, java.lang.String)
	 */
	public Object getByPk(Class clazz, String id) {
		// TODO Auto-generated method stub

		logger.debug("getByPk(Class, String) Class=" + clazz.getName() + ",id="
				+ id);
		
		Object result = null;
		
		Session session = null;
		
		try {

			session = this.getSession();
			
			result = session.get(clazz, id);
			
			// result = (Object) super.getHibernateTemplate().get(clazz, id);

		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}

		return result;
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getSession()
	 */
	public Session getSession() {
		// TODO Auto-generated method stub
		
		return HibernateSessionFactory.getSession();
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getTotalCount(java.lang.String)
	 */
	public int getTotalCount(String strhql) {
		// TODO Auto-generated method stub

		logger.debug("getTotalCount() strhql=" + strhql);
		
		int result = 0;
		
		Session session = null;
		
		try {
			
			String strsql = this.getQueryTotalCountString(strhql);
			
			session = this.getSession();
			
			Query query = session.createQuery(strsql);
			
			List list = query.list();
			
			result = this.getNum(list);
			
		} catch (Exception e) {

			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getTotalCount(java.lang.String, java.lang.Object)
	 */
	public int getTotalCount(String strhql, Object obj) {
		// TODO Auto-generated method stub
		
		logger.debug("getTotalCount(String,Object)  strhql=" + strhql
				+ "" + obj.getClass().getName());

		int result = 0;
		
		Session session = null;
		
		try {
			
			String strsql = this.getQueryTotalCountString(strhql);
			
			//System.out.println(strsql);
			
			logger.debug("strsql="+strsql);
			
			session = this.getSession();
			
			Query query = session.createQuery(strsql);
			
			List list = query.setProperties(obj).list(); 
				
			result = this.getNum(list);
			

		} catch (Exception e) {
			
			String error = Messages.getString("BaseDao.getTotalCount.Error");
			
			logger.debug(error, e);
			
			e.printStackTrace();
			
			throw new DaoException(error);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getTotalCount(java.lang.String, java.util.List)
	 */
	public int getTotalCount(String strhql, List params) {
		// TODO Auto-generated method stub
		
		String paramnameArray=""; 
		 
		if(params!=null)
		{
			
			for (int i = 0; i < params.size(); i++) {
					
					if (i > 0)
						
						paramnameArray += " , " + params.get(i);
					
					else
						
						paramnameArray = ""+params.get(i);
					
			}
		
		}
		
		logger.debug("getTotalCount(String, List) strhql="+strhql+" , List="+paramnameArray);
		
		
		int result = 0;
		
		Session session = null;
		
		try {
			
			String strquery = this.getQueryTotalCountString(strhql);
			
			//System.out.println(strsql);
			
			session = this.getSession();
			
			logger.debug("strquery=="+strquery);
			
			Query query = session.createQuery(strquery);
			
			if(params!=null)
			{
				for (int i = 0; i < params.size(); i++) {
										
					query.setParameter(i, params.get(i));
					
				} 
			}
			
			List list = query.list();

			result = this.getNum(list);
			

		} catch (Exception e) {
			
			String error = Messages.getString("BaseDao.getTotalCount.Error");
			
			logger.debug(error, e);
			
			e.printStackTrace();
			
			throw new DaoException(error);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;  
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getTotalCountBySql(java.lang.String)
	 */
	public int getTotalCountBySql(String strsql) {
		// TODO Auto-generated method stub
		
		logger.debug("getTotalCountBySql(String) strsql=" + strsql);
		
		int result = 0;
		
		Session session = null;
		
		try {
			
			strsql = this.getQueryTotalCountString(strsql);
			
			session = this.getSession(); 
			
			logger.debug("strsql=="+strsql);
			
			List list=session.createSQLQuery(strsql).list();
			 
			result = this.getNum(list);
			
		} catch (Exception e) {

			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
		 
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#getTotalCountBySql(java.lang.String, java.util.List)
	 */
	public int getTotalCountBySql(String strsql, List params) {
		// TODO Auto-generated method stub
		
		String paramnameArray=""; 
		 
		if(params!=null)
		{
			
			for (int i = 0; i < params.size(); i++) {
					
					if (i > 0)
						
						paramnameArray += " , " + params.get(i);
					
					else
						
						paramnameArray = ""+params.get(i);
					
			}
		
		}
		
		logger.debug("getTotalCountBySql(String, List) strsql="+strsql+" , List="+paramnameArray);
		
		
		int result = 0;
		
		Session session = null;
		
		try {
			
			strsql = this.getQueryTotalCountString(strsql);
			
			logger.debug("strsql=="+strsql);
			
			session = this.getSession();
			
			SQLQuery query = session.createSQLQuery(strsql);
			
			if(params!=null)
			{
				for (int i = 0; i < params.size(); i++) {
										
					query.setParameter(i, params.get(i));
					
				} 
			}
			
			List list = query.list();

			result = this.getNum(list);
			

		} catch (Exception e) {
			
			String error = Messages.getString("BaseDao.getTotalCount.Error");
			
			logger.debug(error, e);
			
			e.printStackTrace();
			
			throw new DaoException(error);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
		 
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#loadAll(java.lang.String)
	 */
	public List loadAll(String strhql) {
		// TODO Auto-generated method stub
		return this.find(strhql);
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#loadByPk(java.lang.Class, java.lang.String, java.lang.Object)
	 */
	public Object loadByPk(Class clazz, String keyName, Object keyValue) {
		// TODO Auto-generated method stub
		
		Object result = null;
		
		String query = "from " + clazz.getName() + "  where " + keyName + "=? ";
		
		logger.debug("loadByPk(Class, String, Object) queryString=" + query
				+ "  ,keyValue=" + keyValue);
		
		Session session = null;
		
		try {

			session = this.getSession();
		
			result = session.createCriteria(clazz).add(
					Restrictions.eq(keyName, keyValue)).list();
			

		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;		
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#query(int, int, java.lang.String)
	 */
	public List query(int pageNo, int pageSize, String strhql) {
		// TODO Auto-generated method stub

		logger.debug("query(int, int, String) pageNo=" + pageNo + ",pageSize="
				+ pageSize + " ,strhql=" + strhql);

		List result = null;
		
		Session session = null;
		
		try {
			session = this.getSession();
			
			Query query = session.createQuery(strhql);
			//System.out.println(queryString);
			
			if (pageNo > 0 && pageSize > 0) {
				
				query.setFirstResult((pageNo - 1) * pageSize);
				
				query.setMaxResults(pageSize);
			}
			
			result = query.list();
			
			//System.out.println()
		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#query(int, int, java.lang.String, java.lang.Object)
	 */
	public List query(int pageNo, int pageSize, String strhql, Object obj) {
		// TODO Auto-generated method stub

		logger.debug("query(int, int, String, Object) pageNo=" + pageNo
				+ ",pageSize=" + pageSize + "strhql="+strhql+"  ,obj"
				+ obj.getClass().getName());
		
		List result = null;
		
		Session session = null;
		
		try {
			
			session = this.getSession();
			
			Query query = session.createQuery(strhql);
			
			query.setProperties(obj);
			
			if (pageNo > 0 && pageSize > 0) {
				
				query.setFirstResult((pageNo - 1) * pageSize);
				
				query.setMaxResults(pageSize);
				
			}
			
			result = query.list();
			
		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result;
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#query(int, int, java.lang.String, java.util.List)
	 */
	public List query(int pageNo, int pageSize, String strhql, List params) {
		// TODO Auto-generated method stub

		logger.debug("query(int, int, String, Object) pageNo=" + pageNo + ",pageSize=" + pageSize + ",strhql="+strhql);		
		
		String paramnameArray="";
		
		if(params!=null)
		{
			
			for (int i = 0; i < params.size(); i++) {
					
					if (i > 0)
						
						paramnameArray += " , " + params.get(i);
					
					else
						
						paramnameArray = ""+params.get(i);
					
			}
		
		}
		
		logger.debug("params="+params);
		
		List result = null;
		
		Session session = null;
		
		try {
			
			session = this.getSession();
			
			Query query = session.createQuery(strhql);
			
			if(params!=null)
			{
				for (int i = 0; i < params.size(); i++) {
										
					query.setParameter(i, params.get(i));
					
				} 
			}
			
			if (pageNo > 0 && pageSize > 0) {
				
				query.setFirstResult((pageNo - 1) * pageSize);
				
				query.setMaxResults(pageSize);
				
			}
			
			result = query.list();
			
		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result; 
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#queryBySql(int, int, java.lang.String)
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql) {
		// TODO Auto-generated method stub


		logger.debug("query(int, int, String) pageNo=" + pageNo + ",pageSize="
				+ pageSize + " ,strsql=" + strsql);

		List result = null;
		
		Session session = null;
		
		try {
			
			session = this.getSession();			
			
			SQLQuery query = session.createSQLQuery(strsql);
			
			if (pageNo > 0 && pageSize > 0) {
				
				query.setFirstResult((pageNo - 1) * pageSize);
				
				query.setMaxResults(pageSize);
				
			}
			
			result = query.list();
			
		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		
		return result; 
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#queryBySql(int, int, java.lang.String, java.util.List)
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql, List params) {
		// TODO Auto-generated method stub

		logger.debug("query(int, int, String, Object) pageNo=" + pageNo + ",pageSize=" + pageSize + " , strsql="+strsql);		
		
		String paramnameArray="";
		
		if(params!=null)
		{
			
			for (int i = 0; i < params.size(); i++) {
					
					if (i > 0)
						
						paramnameArray += " , " + params.get(i);
					
					else
						
						paramnameArray = ""+params.get(i);
					
			}
		
		}
		
		logger.debug("params="+params);
		
		List result = null;
		
		Session session = null;
		
		try {
			
			session = this.getSession();
			
			SQLQuery query = session.createSQLQuery(strsql);
			
			if(params!=null)
			{
				for (int i = 0; i < params.size(); i++) {
										
					query.setParameter(i, params.get(i));
					
				} 
			}
			
			if (pageNo > 0 && pageSize > 0) {
				
				query.setFirstResult((pageNo - 1) * pageSize);
				
				query.setMaxResults(pageSize);
				
			}
			
			result = query.list();
			
		} catch (Exception e) {
			
			logger.debug(databeaseError, e);
			
			throw new DaoException(databeaseError);
			
		} finally {
			
			this.closeSession(session);
			
		}
		return result; 
		
	}

	/* (non-Javadoc)
	 * @see zhenjw.hibernate.dao.IBaseDao#update(java.lang.Object)
	 */
	public void update(Object entity) {
		// TODO Auto-generated method stub
		
		logger.debug("update(Object) entity.class="
				+ entity.getClass().getName());
		
		Session session = null;
		
		Transaction tr = null;
		
		try {
			session = this.getSession();
			
			tr = session.beginTransaction();
			
			session.update(entity);
			
			tr.commit();
			
			session.flush();
			
			session.clear();
			
			// super.getHibernateTemplate().update(entity);

		} catch (Exception e) {
			
			if (tr != null)
				
				tr.rollback();
			
			String Error = Messages.getString("BaseDao.update.Error");
			
			logger.debug(Error, e);
			
			throw new DaoException(Error);
			
		} finally {
			
			this.closeSession(session);
			
		}

	}
	
	/**
	 * 功能:关闭session
	 * @param session
	 */
	protected void closeSession(Session session) {

		if (session != null && session.isOpen())
			
			session.close();
		
		session = null;
		
	}
	
	/**
	 * 功能:得到查询记录总数的语句(包含sql与hql)
	 * @param queryString
	 * @return
	 */
	private String getQueryTotalCountString(String queryString) {

		int form_index = queryString.indexOf("from ");
		
		int orderby_index = queryString.indexOf(" order by ");
		
		if (form_index < 0) {
			
			throw new DaoException(Messages
					.getString("BaseDao.getTotalCount.notFromkeyword"));
		
		}
		
		String strsql = " select count(*) ";
		
		if (orderby_index > -1) {
			
			strsql = strsql + queryString.substring(form_index, orderby_index);

		} else {
			
			strsql = strsql + queryString.substring(form_index);
		}

		return strsql;
	}
	
	/**
	 * 功能:得到记录数的方法
	 * @param list
	 * @return
	 */
	protected int getNum(List list)
	{
		
		int result=0;
		
		if (list != null || list.size() > 0) 
			
			result = Integer.parseInt(list.get(0).toString());
		
		 return result;
	}
	


}

分享到:
评论

相关推荐

    基于hibernate的baseDao

    BaseDAO是一种通用的设计模式,它封装了Hibernate框架的基本操作,使得业务逻辑层可以更加专注于业务处理,而不需要关心底层的数据访问细节。本压缩包提供的"baseDAO"文件,包含了一个详细注释的BaseDAO实现,旨在...

    hibernate BASEDAO

    `Hibernate通用的baseDao - zhenjw - JavaEye技术网站.mht`文件可能是关于这个主题的一个网页存档,可能包含了BaseDAO的具体实现细节、讨论或示例代码。JavaEye是一个著名的Java开发者社区,这些资源可能提供了其他...

    hibernate>>BaseDAO

    通过以上这些知识点,我们可以理解`BaseDAO`在Hibernate应用中的核心作用,它是连接业务逻辑和数据库操作的桥梁,通过抽象出通用功能,使得开发者可以更加专注于业务需求的实现,而不是繁琐的数据库交互细节。...

    spring和hibernate集成后,通用的basedao

    在这个名为"ssh"的压缩包中,很可能包含了一个关于Spring和Hibernate集成的示例代码,用于实现一个通用的基于DAO(Data Access Object)的设计模式。 Spring框架通过其IoC(Inversion of Control,控制反转)和AOP...

    hibernate basedao

    涵盖通过hibernate进行数据库操作的通用方法

    hibernate basedao(泛型版本)

    泛型BaseDAO的主要目的是为各种实体类提供一个通用的数据访问接口。`GenericBaseDao.java`实现了`GenericBaseDaoInter.java`接口。通过定义泛型类型T,这个类可以处理任何继承自Hibernate的`Persistent`接口或具有无...

    企业通用BaseDao方法集

    在企业级软件开发中,通用BaseDao方法集是提高代码复用性和开发效率的重要工具。BaseDao(Base Data Access Object)通常是一个基类,它包含了数据库操作的基本方法,供其他具体的DAO类继承使用。BaseDao的设计理念...

    spring4+hibernate4 封装BaseDao增删改查以及分页,,支持jdk1.7,不支持jdk1.8

    3. **BaseDao封装**:BaseDao是一般用于数据访问层的基类,它包含了通用的CRUD操作。在这个项目中,BaseDao可能已经定义了如`save()`, `update()`, `delete()`, `findById()`, `findAll()`等方法,以供其他特定的DAO...

    Java通用的BaseDao(我是用连接池做的你把里面代码换一下就行了)

    同时,BaseDao通常会与MyBatis或Hibernate等ORM框架结合使用,以简化SQL编写和对象关系映射。 总之,"Java通用的BaseDao"是一个高效且灵活的设计,它利用连接池提升性能,并通过提供基本的数据库操作接口,降低了...

    Hibernate_通用DAO模式,一个写好的dao层

    本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...

    basedao_basedao数据库_

    BaseDao是一个抽象类或接口,它定义了一些通用的方法,如增、删、改、查等,这些方法会被具体的Dao类继承或实现。例如,一个基本的BaseDao可能会包含以下方法: 1. `insert(T entity)`: 插入一个实体对象到数据库。...

    Hibernate的通用dao

    **三、Hibernate通用DAO实现** 1. **接口定义**:首先,定义一个通用的DAO接口,如`BaseDao&lt;T&gt;`,其中T代表任何数据实体类型。接口中包含增删改查(CRUD)的基本方法,如`save()`, `update()`, `delete()`, `...

    Hibernate通用分页.docx

    【Hibernate 通用分页】 在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使开发者可以使用面向对象的方式来处理数据库事务。在处理大量数据时,分页功能是必不可少的,以...

    通用底层BaseDao

    "通用底层BaseDao"就是这种模式的一种实现,它提供了一个基础的DAO接口或者抽象类,其他特定的DAO(如UserDao)可以直接继承或实现这个BaseDao,从而复用通用的功能,减少代码冗余,提高开发效率。 BaseDao通常包含...

    Hibernate 参数查询通用方法

    本篇将详细探讨"Hibernate参数查询通用方法"这一主题,以及如何通过Dao层实现高效、灵活的数据查询。 在Hibernate中,参数查询通常涉及到HQL(Hibernate Query Language)或者使用Criteria API。这两种方式都可以...

    BaseDao的封装

    这些方法的实现可以使用模板方法设计模式,将一部分通用逻辑放在`BaseDao`中,而具体的SQL语句或者HQL(Hibernate Query Language)则由子类提供。 在实际项目中,`BaseDao`的实现往往需要结合事务管理。例如,当一...

    ssh+baseDao实现分页

    1. **创建BaseDao**:BaseDao是数据访问层的一个抽象,它包含了一些通用的方法,如增删改查。在BaseDao中,我们可以定义一个分页查询的方法,比如`List&lt;T&gt; findByPage(int pageNum, int pageSize)`。这个方法接受...

    SpringBoot_BaseDao.zip

    在BaseDao中,泛型可以用来定义通用的类型参数,比如,使得BaseDao能够处理任何类型的实体对象,而无需为每种实体创建一个新的DAO类。 反射是Java的一个重要特性,它允许运行时动态地获取类的信息并调用其方法。在...

    SSH集成查询分页处理BaseDao

    在这个场景中,"BaseDao"通常是一个基类,它包含了通用的数据库操作方法,可以被各个特定的DAO(Data Access Object)继承,以实现业务逻辑中的数据访问。 1. **BaseDao**:BaseDao是DAO层的基类,它的设计目的是...

    Spring声明式事务及BaseDao完整版

    3. **实现方式**:BaseDao通常基于JDBC或ORM框架(如Hibernate、MyBatis)实现,提供基本的SQL执行和结果映射功能。 4. **扩展性**:子类可以继承BaseDao,并根据业务需求添加特定的数据库操作方法。 四、Spring...

Global site tag (gtag.js) - Google Analytics