您当前的位置: 首页 >  ssh

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SSH04---分页

宝哥大数据 发布时间:2017-09-12 08:46:58 ,浏览量:0

分页 1.1、导入分页的包 pager-taglib.jar 1.2、创建分页对象
package com.chb.spring_hibernate.model;

import java.util.List;

/**
 * 分页对象
 */
public class Pager {
    /**
     * 数据
     */
    private List datas;
    /**
     * 当前页数
     */
    private int pageOffset;
    /**
     * 总的记录数
     */
    private int totalRecord;
    /**
     * 总的页数
     */
    private int pageSize;

    ...setter getter
}
1.3、修改IBaseDao, list不分页, find分页, 提供三个方法
    /** list不分也, find 分页 */
    public List find(String hql, Object[] args);
    public List find(String hql, Object obj);
    public List find(String hql);    
}
1.4、在BaseDao中实现
    @Override
    public List find(String hql, Object[] args) {
        //创建分页对象
        Pager pager = new Pager();

        return null;
    }

    @Override
    public List find(String hql, Object obj) {
        return this.find(hql, new Object[] {obj});
    }

    @Override
    public List find(String hql) {
        return this.find(hql, null);
    }
}
1.4.1、主要关注find(String hql, Object[] args) 1.4.1.1、既然要实现分页, 那么就需要Pager对象
    @Override
    public List find(String hql, Object[] args) {
        //创建分页对象
        Pager pager = new Pager();

        return null;
    }
1.4.2、有了Pager对象, 就需要获取Pager的参数, pageOffset, 这个需要从哪个界面层获取, 通过SystemContext对象获取。ThreadLocal , 不同之间获取数据
package com.chb.spring_hibernate.model;

public class SystemContext {
    /**
     * 获取offset
     */
    private static ThreadLocal pageOffset = new ThreadLocal();
    /**
     * 获取pageSize, 总页数
     */
    private static ThreadLocal pageSize = new ThreadLocal();

    /**
     * 注意get, set获取, 返回的都是int类型
     * @return
     */
    public static int getPageOffset() {
        return pageOffset.get();
    }

    public static void setPageOffset(int _pageOffset) {
        pageOffset.set(_pageOffset);
    }

    public static int getPageSize() {
        return pageSize.get();
    }

    public static void setPageSize(int _pageSize) {
        pageSize.set(_pageSize);
    }

    public static void removePageSize() {
        pageSize.remove();
    }

    public static void removePageOffset() {
        pageOffset.remove();
    }
}
1.4.3、在过滤器中设置值, 创建过滤器SystemContextFilter
package com.chb.spring_hibernate.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.chb.spring_hibernate.model.SystemContext;

public class SystemContextFilter implements Filter{
    private int pageSize = 0;

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        int pageOffset = 0;
        try {
            try {
                SystemContext.setPageOffset(Integer.parseInt(req.getParameter("pageOffset")));
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
            SystemContext.setPageOffset(pageOffset);
            SystemContext.setPageSize(pageSize);
        }finally{
            //最终移除
            SystemContext.removePageOffset();
            SystemContext.removePageSize();
        }

        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig cfg) throws ServletException {

        try {
            pageSize = Integer.parseInt(cfg.getInitParameter("pageOffset"));
        } catch (NumberFormatException e) {
            //出现异常,初始化pageSize;
            pageSize = 10;
        }


    }

}
1.4.4、在web.xml设置过滤器, 注意必须在Strtus的过滤器之前

这里写图片描述

1.5、在find() 中继续, 获取pageSize, pageOffset 1.5.1、查询

这里写图片描述

1.5.2、如何获取totalRecord 1.5.2.1、根据输入的查询对象的hql, 变化成查询记录条数的语句
    /**
     * 根据hql, 获取 统计count(*)
     * from User  ---> select count(*) from User
     * select * from User u where u.id = ?  ---> select count(*) from User u where u.id=?
     * 总结就是将from 前面的替换成 select count(*) 
     * 
     * @param hql
     * @return
     */
    private String getCountHql(String hql) {
        String f = hql.substring(0, hql.indexOf("from"));
        if (f.equals("")) { //from User
            hql = "select count(*)" + hql;
        }else {
            hql = hql.replace(f, "select count(*)  ");
        }
        return hql;
    }
1.5.2.2、获取totalRecord

这里写图片描述

1.5.2.3 精简

这里写图片描述

1.6、创建分页标签/SSH01_struts2/WebContent/inc/pager.jsp





    


共${items }记录,共${pageNumber }页,

当前第${curPage }页

    首页


    上一页




    [${pageNumber }]


    ${pageNumber }



    下一页


    尾页

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0424s