BaseDao终极版

这个博客介绍了如何创建一个基于HibernateTemplate的BaseDao通用类,该类包含了执行HQL查询、分页查询、根据条件查找实体等常用操作。BaseDao通过泛型实现了对不同实体类的操作,并使用了Spring的HibernateTemplate进行数据访问。
摘要由CSDN通过智能技术生成


import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.annotation.Resource;

import net.houder.command.CriteriaCommand;
import net.houder.command.FieldCommandImpl;
import net.houder.command.QueryFilter;
import net.houder.command.SortCommandImpl;
import net.houder.common.HDErrorException;
import net.houder.paging.PagingBean;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.hql.ast.QueryTranslatorImpl;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;

public class BaseDao<T> implements AbstractDao<T, Long> {

	protected transient final Logger logger = Logger.getLogger(getClass());

	/**
	 * 创建clazz对象,存储转型过来的T
	 */
	private Class<T> clazz;

	/**
	 * 创建HibernateTemplate对象
	 */
	@Resource(name = "hibernateTemplate")
	protected HibernateTemplate hibernateTemplate;

	protected Map<String, String> querys = new HashMap<String, String>();

	public Map<String, String> getQuerys() {
		return querys;
	}

	public void setQuerys(Map<String, String> querys) {
		this.querys = querys;
	}

	/**
	 * 构造方法,把T转型成指定对象
	 */
	@SuppressWarnings("unchecked")
	public BaseDao() {
		// 得到被泛型的实体的class
		clazz = (Class<T>) ((ParameterizedType) getClass()
				.getGenericSuperclass()).getActualTypeArguments()[0];
	}

	@Override
	public void commitTrans() {
		throw new HDErrorException("未实现!");
	}

	@Override
	public void clear() {
		hibernateTemplate.clear();
	}

	@Override
	public void evict(T entity) {
		hibernateTemplate.evict(entity);
	}

	public List<T> findByHql(final String hql) {
		Object objs[] = null;
		return findByHql(hql, objs);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<T> findByHql(final String hql, final Object[] objs) {
		return (List<T>) hibernateTemplate.execute(new HibernateCallback() {

			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session.createQuery(hql);
				if (objs != null) {
					for (int i = 0; i < objs.length; i++) {
						query.setParameter(i, objs[i]);
					}
				}
				return (List<T>) query.list();
			}

		});
	}

	@SuppressWarnings("unchecked")
	@Override
	public List findByHql(final String hql, final Map paras) {
		return (List<T>) hibernateTemplate.execute(new HibernateCallback() {

			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session.createQuery(hql);
				query.setProperties(paras);
				// if (objs != null) {
				// for (int i = 0; i < objs.length; i++) {
				// query.setParameter(i, objs[i]);
				// }
				// }
				return (List<T>) query.list();
			}

		});
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<T> findByHql(final String hql, final Object[] objs,
			final int firstResult, final int pageSize) {
		return (List<T>) hibernateTemplate.execute(new HibernateCallback() {

			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session.createQuery(hql);
				query.setFirstResult(firstResult).setMaxResults(pageSize);
				if (objs != null) {
					for (int i = 0; i < objs.length; i++) {
						query.setParameter(i, objs[i]);
					}
				}
				return (List<T>) query.list();
			}

		});
	}

	@Override
	public List<T> findByHql(String hql, Object[] objs, PagingBean pagingBean) {
		int totalItems = getTotalItems(hql, objs).intValue();
		pagingBean.setTotalItems(totalItems);
		return findByHql(hql, objs, pagingBean.getFirstResult(), pagingBean
				.getPageSize());
	}

	@SuppressWarnings("unchecked")
	public Object findUnique(final String hql, final Object[] values) {
		return hibernateTemplate.execute(new HibernateCallback() {

			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				Query query = session.createQuery(hql);

				if (values != null) {
					for (int i = 0; i < values.length; i++) {
						query.setParameter(i, values[i]);
					}
				}
				return query.uniqueResult();
			}

		});
	}

	/**
	 * 通过编号找到记录 编号的字段名称必须是"code"
	 * 
	 * @param code
	 * 
	 * @return
	 */
	public T findByCode(String code) throws HDErrorException {
		return findByCode("code", code);
	}

	/**
	 * 通过唯一键找到记录
	 * 
	 * @return
	 */
	public T findByCode(String codefldname, String code)
			throws HDErrorException {
		final String codefldname1 = codefldname;
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值