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;
BaseDao终极版
最新推荐文章于 2021-09-18 11:19:08 发布
这个博客介绍了如何创建一个基于HibernateTemplate的BaseDao通用类,该类包含了执行HQL查询、分页查询、根据条件查找实体等常用操作。BaseDao通过泛型实现了对不同实体类的操作,并使用了Spring的HibernateTemplate进行数据访问。
摘要由CSDN通过智能技术生成