小技巧合集 (-) 分页的获取

public PageResult<T> findPageResult(final BaseQuery baseQuery) {
        //创建pageResult对象
        final PageResult<T> result=new PageResult<T>(baseQuery.getCurrentPage(),baseQuery.getPageSize(),this.getCount(baseQuery));
        final StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("from "+this.clazz.getSimpleName());
        stringBuffer.append(" where 1=1 ");
        //在map中封装的查询条件
        final Map<String, Object>keyValue=baseQuery.getKeyValues();
        //添加查询条件
        for (Entry<String, Object> entry : keyValue.entrySet()) {
            stringBuffer.append(" and "+entry.getKey()+"=:"+entry.getKey());
        }
        //handler模式
        return this.hibernateTemplate.execute(new HibernateCallback<PageResult<T>>() {

            @Override
            public PageResult<T> doInHibernate(Session session) throws HibernateException {
                Query query =session.createQuery(stringBuffer.toString());
                //添加查询条件值
                for (Entry<String, Object> entry : keyValue.entrySet()) {
                    query.setParameter(entry.getKey(), entry.getValue());
                }
                //设置当前页的第一行在集合的位置
                int firstResult=(baseQuery.getCurrentPage()-1)*baseQuery.getPageSize();
                //设置每页显示的行数
                int maxResult=baseQuery.getPageSize();
                //分页语句
                query.setFirstResult(firstResult).setMaxResults(maxResult);
                List<T>list = query.list();
                result.setRows(list);
                return result;
            }
        });
    }

BaseQuery

/**
 * 1.提供一个抽象方法,让子类完成,把具体的页面上的表单元素封装成Map
 * 2.提供一个Map供子类使用
 * @author sh
 * @Time   下午9:32:27
 */
public abstract class BaseQuery {
    /**
     * 当前页数,初始化的值为1
     */
    private int currentPage=1;
    /**
     * 一页显示的条数
     */
    private int pageSize=2;


    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;
    }


    /**
     * 把页面上的表单元素封装成Map
     */
    private Map<String, Object> keyValues=new HashMap<String, Object>();


    public Map<String, Object> getKeyValues() {
        return keyValues;
    }


    public void setKeyValues(Map<String, Object> keyValues) {
        this.keyValues = keyValues;
    }


    /**
     * 把页面上的查询条件封装成一个Map<String,Object>
     * 并且返回
     * @return
     */
    public abstract Map<String, Object> buildWhere();
}
public int getCount(final BaseQuery baseQuery) {
        return this.hibernateTemplate.execute(new HibernateCallback<Integer>() {

            @Override
            public Integer doInHibernate(Session session) throws HibernateException {
                StringBuffer stringBuffer=new StringBuffer();
                stringBuffer.append("select count("+classMetadata.getIdentifierPropertyName()+") from "+clazz.getSimpleName());
                stringBuffer.append(" where 1=1 ");
                //获取所有的查询条件
                Map<String, Object>keyValue=baseQuery.buildWhere();
                //where 条件的拼接
                System.out.println(stringBuffer.toString());
                for (Entry<String, Object> entry : keyValue.entrySet()) {
                    stringBuffer.append("and "+entry.getKey()+"=:"+entry.getKey());
                }
                Query query =session.createQuery(stringBuffer.toString());//存放一个hql语句
                //where 值的拼接
                for (Entry<String, Object> entry : keyValue.entrySet()) {
                    query.setParameter(entry.getKey(), entry.getValue());
                }
                Long count = (Long)query.uniqueResult();

                return count.intValue();
            }
        });

    }

学习中遇到的好的方法的合集!

发布了51 篇原创文章 · 获赞 7 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_28042463/article/details/51365674