最近接触的一个项目,看到之前他们写的Hibernate分页工具挺不错的,记录一下。
Dao层:
/**
*
*/
package com.zte.irobot.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigInteger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.springframework.stereotype.Repository;
import com.zte.irobot.dao.BaseDao;
import com.zte.irobot.util.HibernateHandler;
import com.zte.irobot.util.ObjectUtil;
import com.zte.irobot.util.Pagination;
/**
* @author
*/
@Repository
public class BaseDaoImpl<T> implements BaseDao<T> {
protected Class<T> entityClazz;
protected SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
public BaseDaoImpl() {
Type type = getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
this.entityClazz = (Class<T>) ((ParameterizedType) type).getActualTypeArguments()[0];
} else {
this.entityClazz = null;
}
}
@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
public Object save(Object entity) {
return (T) getSession().save(entity);
}
public void delete(Object entity) {
getSession().delete(entity);
}
public void update(Object entity) {
getSession().update(entity);
}
public void saveOrUpdate(Object entity) {
getSession().saveOrUpdate(entity);
}
public void saveAll(Collection<?> entities) {
for (@SuppressWarnings("rawtypes")
Iterator localIterator = entities.iterator(); localIterator.hasNext();) {
Object entity = localIterator.next();
getSession().save(entity);
}
}
public void deleteAll(Collection<?> entities) {
for (@SuppressWarnings("rawtypes")
Iterator localIterator = entities.iterator(); localIterator.hasNext();) {
Object entity = localIterator.next();
getSession().delete(entity);
}
}
public void updateAll(Collection<?> entities) {
for (@SuppressWarnings("rawtypes")
Iterator localIterator = entities.iterator(); localIterator.hasNext();) {
Object entity = localIterator.next();
getSession().update(entity);
}
}
public void saveOrUpdateAll(Collection<?> entities) {
for (@SuppressWarnings("rawtypes")
Iterator localIterator = entities.iterator(); localIterator.hasNext();) {
Object entity = localIterator.next();
getSession().saveOrUpdate(entity);
}
}
@SuppressWarnings({ "unchecked", "hiding" })
public <T> T get(Class<T> entityClass, Serializable id) {
return (T) getSession().get(entityClass, id);
}
@SuppressWarnings({ "unchecked", "rawtypes", "hiding" })
public <T> T get(CharSequence queryString, Object... params) {
Query qry = getSession().createQuery(queryString.toString());
for (int i = 0; i < params.length; ++i) {
qry.setParameter(i, params[i]);
}
List list = qry.setMaxResults(1).list();
if (list.isEmpty())
return null;
return (T) list.get(0);
}
@SuppressWarnings({ "unchecked", "hiding" })
public <T> T get(CharSequence queryString, Map<String, Object> params) {
Query qry = getSession().createQuery(queryString.toString());
setParameter(qry, params);
@SuppressWarnings("rawtypes")
List list = qry.setMaxResults(1).list();
if (list.isEmpty())
return null;
return (T) list.get(0);
}
@SuppressWarnings({ "unchecked", "hiding" })
public <T> List<T> findList(CharSequence queryString, Object... params) {
Query query = getSession().createQuery(queryString.toString());
for (int i = 0; i < params.length; ++i) {
query.setParameter(i, params[i]);
}
return query.list();
}
@SuppressWarnings({ "unchecked", "hiding" })
public <T> List<T> findList(CharSequence queryString, Map<String, Object> params) {
Query query = getSession().createQuery(queryString.toString());
setParameter(query, params);
return query.list();
}
@SuppressWarnings({ "unchecked", "hiding" })
public <T> Pagination<T> findPagination(CharSequence queryString, int pageIndex, int pageSize, Object... params) {
Query query = getSession().createQuery(queryString.toString());
if ((pageSize > 0) && (pageIndex > 0)) {
query.setFirstResult((pageIndex < 2) ? 0 : (pageIndex - 1) * pageSize);
query.setMaxResults(pageSize);
}
for (int i = 0; i < params.length; ++i) {
query.setParameter(i, params[i]);
}
@SuppressWarnings("rawtypes")
List items = query.list();
long rowsCount = 0L;
if ((pageSize > 0) && (pageIndex > 0)) {
String hql = parseSelectCount(queryString.toString());
rowsCount = ((Long) get(hql, params)).longValue();
} else {
rowsCount = items.size();
}
@SuppressWarnings("rawtypes")
Pagination pagination = new Pagination(pageIndex, pageSize, rowsCount);
pagination.setItems(items);
return pagination;
}
@SuppressWarnings({ "uncheck