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

📄 basedaoimpl.java

📁 《j2ee开发全程实录》随书源码
💻 JAVA
字号:
package com.cownew.PIS.framework.bizLayer;

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

import org.apache.commons.collections.KeyValue;
import org.hibernate.Query;
import org.hibernate.Session;

import com.cownew.PIS.framework.bizLayer.hibernate.HibernateConfig;
import com.cownew.PIS.framework.bizLayer.hibernate.HibernateDTOGenerator;
import com.cownew.PIS.framework.common.IBaseDAO;
import com.cownew.PIS.framework.common.IValueObject;
import com.cownew.PIS.framework.common.PagingQueryParam;
import com.cownew.PIS.framework.common.db.Selectors;
import com.cownew.PIS.framework.common.metaDataMgr.NameUtils;
import com.cownew.PIS.framework.common.utils.KeyValueList;
import com.cownew.PIS.framework.server.helper.ThreadVariableManager;

public abstract class BaseDAOImpl extends BizCtrlImpl implements IBaseDAO
{

	public BaseDAOImpl()
	{
		super();
	}

	protected Session getSession()
	{
		return ThreadVariableManager.getInstance().getSession();
	}

	public String save(IValueObject valueObject)
	{
		validateVO(valueObject);
		Serializable sr = getSession().save(valueObject);
		getSession().flush();
		return (String) sr;
	}
	
	/**
	 * 验证数据的合法性
	 * @param valueObject
	 * @
	 */
	protected void validateVO(IValueObject valueObject)
	{
		
	}

	public void update(IValueObject valueObject)
	{
		validateVO(valueObject);
		getSession().update(valueObject);
		getSession().flush();
	}

	public void delete(IValueObject value)
	{
		getSession().delete(value);
		getSession().flush();
	}

	public void delete(String pk) 
	{
		Object obj = getSession().load(getPersistObjectClass(), pk);
		delete((IValueObject) obj);
	}

	public IValueObject loadByPK(String id, Selectors selectors)
			
	{
		IValueObject object = (IValueObject) getSession().load(
				getPersistObjectClass(), id);

		
		IValueObject dto = null;
		if (selectors == null)
		{
			dto = (IValueObject) getDTOGenerator().generateDTO(object);
		} else
		{
			dto = (IValueObject) getDTOGenerator().generateDTO(object,
					selectors);
		}

		getSession().evict(object);
		return dto;
	}

	public List load(String oql, Selectors selectors,PagingQueryParam pageParam) 
	{
		Query q = getSession().createQuery(oql);
		
		if(pageParam!=null)
		{
			q.setMaxResults(pageParam.getPageSize());
			q.setFirstResult(pageParam.getPageSize()*pageParam.getPageIndex());
		}
		
		List poList = q.list();

		List dtoList = null;
		if (selectors == null)
		{
			dtoList = getDTOGenerator().generateDTOList(poList);
		} else
		{
			dtoList = getDTOGenerator().generateDTOList(poList, selectors);
		}
		evict(getSession(), poList);
		return dtoList;
	}

	public List loadAll(Selectors selectors,PagingQueryParam pageParam) 
	{
		Query q = getSession().createQuery(
				"from " + getPersistObjectClass().getName());
		
		if(pageParam!=null)
		{
			q.setMaxResults(pageParam.getPageSize());
			q.setFirstResult(pageParam.getPageSize()*pageParam.getPageIndex());
		}
		
		List poList = q.list();
		List dtoList = null;
		if (selectors == null)
		{
			dtoList = getDTOGenerator().generateDTOList(poList);
		} else
		{
			dtoList = getDTOGenerator().generateDTOList(poList, selectors);
		}
		evict(getSession(), poList);
		return dtoList;
	}

	public List load(String oql, KeyValueList params, Selectors selectors,PagingQueryParam pageParam)
			
	{
		Query q = getSession().createQuery(oql);
		
		if(pageParam!=null)
		{
			q.setMaxResults(pageParam.getPageSize());
			q.setFirstResult(pageParam.getPageSize()*pageParam.getPageIndex());
		}
		
		if (params != null)
		{
			for (int i = 0, n = params.size(); i < n; i++)
			{
				KeyValue keyValue = params.getKeyValue(i);
				q.setParameter(keyValue.getKey().toString(), keyValue
						.getValue());
			}
		}
		List poList = q.list();
		List dtoList = null;
		if (selectors == null)
		{
			dtoList = getDTOGenerator().generateDTOList(poList);
		} else
		{
			dtoList = getDTOGenerator().generateDTOList(poList, selectors);
		}
		evict(getSession(), poList);
		return dtoList;
	}

	public IValueObject loadByPK(String id) 
	{
		return loadByPK(id, null);
	}

	public List load(String oql) 
	{
		return load(oql, (Selectors) null);
	}

	public List loadAll() 
	{
		return loadAll((Selectors)null);
	}

	public List load(String oql, KeyValueList params) 
	{
		return load(oql, params,(Selectors)null);
	}	

	
	public List load(String oql, KeyValueList params, PagingQueryParam pageParam) 
	{
		return load(oql,params,(Selectors)null,pageParam);
	}

	public List load(String oql, KeyValueList params, Selectors selectors) 
	{
		return load(oql,params,selectors,(PagingQueryParam)null);
	}

	public List load(String oql, PagingQueryParam pageParam) 
	{
		return load(oql,(Selectors)null,pageParam);
	}

	public List load(String oql, Selectors selectors) 
	{
		return load(oql,selectors,(PagingQueryParam)null);
	}

	public List loadAll(PagingQueryParam pageParam) 
	{
		return loadAll((Selectors)null,pageParam);
	}

	public List loadAll(Selectors selectors) 
	{
		return loadAll(selectors,(PagingQueryParam)null);
	}

	
	
	public boolean exists(String oql, KeyValueList params)
	{
		Query query = getSession().createQuery("select count(*) " + oql);
		for (int i = 0, n = params.size(); i < n; i++)
		{
			KeyValue keyValue = params.getKeyValue(i);
			query.setParameter(keyValue.getKey().toString(), keyValue
					.getValue());
		}
		Number count = (Number) query.uniqueResult();
		return count.intValue() > 0;
	}

	public boolean exists(String oql) 
	{
		return exists(oql,new KeyValueList());
	}	

	public  String getEntityPath() 
	{
		return NameUtils.getEntityPath(getPersistObjectClass().getName());
	}

	protected abstract Class getPersistObjectClass();

	
	private static void evict(Session session, List poList)
	{
		for (int i = 0, n = poList.size(); i < n; i++)
		{
			session.evict(poList.get(i));
		}
	}

	private static IDTOGenerator getDTOGenerator()
	{
		// 不能用单例,否则效率会很低的
		return new HibernateDTOGenerator(HibernateConfig.getSessionFactory());
	}
	
}

⌨️ 快捷键说明

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