public abstract class BaseDaoextends HibernateDaoSupport {protected static final Logger logger = LoggerFactory.getLogger(BaseDao.class);privateClass clazz;privateString clazzName;
@Resource(name= "sessionFactoryOne")public voidsetMySessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}publicBaseDao() {//使用反射的方式获得类名(表名)
Type type = this.getClass().getGenericSuperclass();if(type instanceof ParameterizedType) {
ParameterizedType pt=(ParameterizedType) type;
Type[] tps=pt.getActualTypeArguments();if (tps.length > 0) {this.clazz = (Class) tps[0];this.clazzName =clazz.getName();
}
}
}/**
* 插入t
*
* @return*/
publicT saveOrUpdate(T t) {
currentSession().saveOrUpdate(t);returnt;
}public T get(Serializable id) {
T t= (T) currentSession().get(this.clazz, id);returnt;
}public ListgetAll() {
Query q= currentSession().createQuery("from" +clazzName);returnq.list();
}public int del(longid) {
Query q= currentSession().createQuery("delete from" + clazzName + "where id = ?");return q.setParameter(0, id).executeUpdate();
}/**
* 删除对象
*
* @param t*/
publicT del(T t) {
currentSession().delete(t);returnt;
}/**
* 根据HQL查询List
*
* @param hql
* @return*/
protected Listfind(String hql) {
Query q=currentSession().createQuery(hql);returnq.list();
}/**
*
*
* @param hqlString hql
* @param values 不定参数数组*/
public voidqueryHql(String hqlString, Object... values) {
Query query=currentSession().createQuery(hqlString);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
query.executeUpdate();
}/**
*
*
* @param sqlString sql
* @param values 不定参数数组*/
public voidquerySql(String sqlString, Object... values) {
Query query=currentSession().createSQLQuery(sqlString);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
query.executeUpdate();
}/**
*
*
* @param hqlString HQL
* @param values 不定参数数组
* @return*/
publicT getByHQL(String hqlString, Object... values) {
Query query=currentSession().createQuery(hqlString);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}return(T) query.uniqueResult();
}/**
*
*
* @param sqlString SQL语句
* @param values 不定参数的Object数组
* @return*/
publicT getBySQL(String sqlString, Object... values) {
Query query=currentSession().createSQLQuery(sqlString);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}return(T) query.uniqueResult();
}/**
*
*
* @param hqlString HQL语句
* @param values
* @return*/
public ListgetListByHQL(String hqlString, Object... values) {
Query query=currentSession().createQuery(hqlString);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}returnquery.list();
}/**
*
*
* @param sqlString
* @param values
* @return*/
public ListgetListBySQL(String sqlString, Object... values) {
Query query=currentSession().createSQLQuery(sqlString);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}returnquery.list();
}/**
*
*
* @param hql
* @param values
* @return*/
publicLong countByHql(String hql, Object... values) {
Query query=currentSession().createQuery(hql);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}return(Long) query.uniqueResult();
}/**
*
*
* @param hql
* @param countHql 查询记录条数的HQL语句
* @param pageNo 下一页
* @param pageSize 一页总条数
* @param values
* @return*/
public PageResultsfindPageByFetchedHql(String hql, String countHql,int pageNo, intpageSize, Object... values) {
PageResults retValue = new PageResults();
Query query=currentSession().createQuery(hql);if (values != null) {for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}int currentPage = pageNo > 1 ? pageNo : 1;
retValue.setCurrentPage(currentPage);
retValue.setPageSize(pageSize);if (countHql == null) {
ScrollableResults results=query.scroll();
results.last();
retValue.setTotalCount(results.getRowNumber()+ 1);//设置总记录数
} else{
Long count=countByHql(countHql, values);
retValue.setTotalCount(count.intValue());
}
retValue.resetPageNo();
List itemList = query.setFirstResult((currentPage - 1) *pageSize).setMaxResults(pageSize).list();if (itemList == null) {
itemList= new ArrayList();
}
retValue.setResults(itemList);returnretValue;
}
}