hibernate的BaseDao,带分页

BaseDao.java

public abstract class BaseDao<T extends Serializable> extends HibernateDaoSupport {


    protected static final Logger logger = LoggerFactory.getLogger(BaseDao.class);

    private Class clazz;

    private String clazzName;

    @Resource(name = "sessionFactoryOne")
    public void setMySessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }

    public BaseDao() {
        //使用反射的方式获得类名(表名)
        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
     */
    public T saveOrUpdate(T t) {
        currentSession().saveOrUpdate(t);
        return t;
    }

    public T get(Serializable id) {
        T t = (T) currentSession().get(this.clazz, id);
        return t;
    }

    public List<T> getAll() {
        Query q = currentSession().createQuery("from " + clazzName);
        return q.list();
    }

    public int del(long id) {
        Query q = currentSession().createQuery("delete from " + clazzName + " where id = ?");
        return q.setParameter(0, id).executeUpdate();
    }

    /**
     * 删除对象
     *
     * @param t
     */
    public T del(T t) {
        currentSession().delete(t);
        return t;
    }

    /**
     * 根据HQL查询List
     *
     * @param hql
     * @return
     */
    protected List<T> find(String hql) {
        Query q = currentSession().createQuery(hql);
        return q.list();
    }


    /**
     * <执行Hql语句>
     *
     * @param hqlString hql
     * @param values    不定参数数组
     */
    public void queryHql(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();
    }

    /**
     * <执行Sql语句>
     *
     * @param sqlString sql
     * @param values    不定参数数组
     */
    public void querySql(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();
    }

    /**
     * <根据HQL语句查找唯一实体>
     *
     * @param hqlString HQL
     * @param values    不定参数数组
     * @return
     */
    public T 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();
    }


    /**
     * <根据SQL语句查找唯一实体>
     *
     * @param sqlString SQL语句
     * @param values    不定参数的Object数组
     * @return
     */
    public T 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();
    }


    /**
     * <根据HQL语句,得到对应的list>
     *
     * @param hqlString HQL语句
     * @param values
     * @return
     */
    public List<T> getListByHQL(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 query.list();
    }

    /**
     * <根据SQL语句,得到对应的list>
     *
     * @param sqlString
     * @param values
     * @return
     */
    public List<T> getListBySQL(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 query.list();
    }

    /**
     * <根据HQL得到记录数>
     *
     * @param hql
     * @param values
     * @return
     */
    public Long 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();
    }


    /**
     * <HQL分页查询>
     *
     * @param hql
     * @param countHql 查询记录条数的HQL语句
     * @param pageNo   下一页
     * @param pageSize 一页总条数
     * @param values
     * @return
     */
    public PageResults<T> findPageByFetchedHql(String hql, String countHql,
                                               int pageNo, int pageSize, Object... values) {
        PageResults<T> retValue = new PageResults<T>();
        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<T> itemList = query.setFirstResult((currentPage - 1) * pageSize).setMaxResults(pageSize).list();
        if (itemList == null) {
            itemList = new ArrayList<T>();
        }
        retValue.setResults(itemList);
        return retValue;
    }

}

分页

public class PageResults<T> {
    // 下一页
    private int pageNo;

    // 当前页
    private int currentPage;

    // 每页个个数
    private int pageSize;

    // 总条数
    private int totalCount;

    // 总页数
    private int pageCount;

    // 记录
    private List<T> results;

    public int getPageCount() {
        return pageCount;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public int getPageNo() {
        if (pageNo <= 0) {
            return 1;
        } else {
            return pageNo > pageCount ? pageCount : pageNo;
        }
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    public List<T> getResults() {
        return results;
    }

    public void setResults(List<T> results) {
        this.results = results;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize <= 0 ? 10 : pageSize;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public void resetPageNo() {
        pageNo = currentPage + 1;
        pageCount = totalCount % pageSize == 0 ? totalCount / pageSize
                : totalCount / pageSize + 1;
    }
}

 

posted @ 2016-11-22 17:37  情迷英伦  阅读(1592)  评论(0编辑  收藏  举报