web中分页查询

来源:互联网 发布:软件之间的接口 编辑:程序博客网 时间:2024/05/16 14:50

页面效果图:

效果图

分页查询的思想原理:

  1. 分页显示时,需要知道的数据有:当前页码,每页的数据条数,整个数据集合的数据的总条数,开始行号,结束行号,可根据前两个数据计算出后边的数据
  2. 查新条件(QueryCondition)和页面信息(Page)分别封装对象,用于动态条件查询和页面信息的展示

sql语句代码:

<!-- 分页查询的结果集 -->    <select id="selectItemByCondition" parameterType="com.wyj.ecps.model.QueryCondition"        resultMap="BaseResultMap">        select * from        (select rownum rw ,a.*        from (        select * from eb_item t        <where>            <if test="brandId != null">                t.brand_id = #{brandId}            </if>            <if test="auditStatus != null">                and t.audit_status = #{auditStatus}            </if>            <if test="showStatus != null">                and t.show_status = #{showStatus}            </if>            <if test="itemName != null">                and t.item_name like '%${itemName}%'            </if>        </where>        order by t.item_id desc        ) a        <!-- 把'<'转义 -->        <![CDATA[        where rownum < #{endNum}) b   where b.rw > #{startNum}   ]]>    </select>    <!-- 查询当前条件下的记录数 -->    <select id="selectItemByConditionCount" parameterType="com.wyj.ecps.model.QueryCondition"        resultType="int">        select count(item_id) from eb_item t        <where>            <if test="brandId != null">                t.brand_id = #{brandId}            </if>            <if test="auditStatus != null">                and t.audit_status = #{auditStatus}            </if>            <if test="showStatus != null">                and t.show_status = #{showStatus}            </if>            <if test="itemName != null">                and t.item_name like '%${itemName}%'            </if>        </where>    </select>

查询条件的封装对象代码:

public class QueryCondition {    private Integer auditStatus;    private Integer showStatus;    private Long brandId;    private String itemName;    //开始的行号    private Integer startNum;    //结束的行号    private Integer endNum;    //当前页码    private Integer pageNo;    public Integer getPageNo() {        return pageNo;    }    public void setPageNo(Integer pageNo) {        this.pageNo = pageNo;    }    public Integer getAuditStatus() {        return auditStatus;    }    public void setAuditStatus(Integer auditStatus) {        this.auditStatus = auditStatus;    }    public Integer getShowStatus() {        return showStatus;    }    public void setShowStatus(Integer showStatus) {        this.showStatus = showStatus;    }    public Long getBrandId() {        return brandId;    }    public void setBrandId(Long brandId) {        this.brandId = brandId;    }    public String getItemName() {        return itemName;    }    public void setItemName(String itemName) {        this.itemName = itemName;    }    public Integer getStartNum() {        return startNum;    }    public void setStartNum(Integer startNum) {        this.startNum = startNum;    }    public Integer getEndNum() {        return endNum;    }    public void setEndNum(Integer endNum) {        this.endNum = endNum;    }}

页面信息的代码:

public class Page {    //当前页码(已知)    private int pageNo = 1;    //每页记录数(已知)    private int pageSize = 5;    //指定查询条件下的记录数(已知)    private int totalCount = 0;    //指定查询下的总页数(未知)    private int totalPage = 1;    //开始行号(未知)    private int startNum = 0;    //结束行号(未知)    private int endNum = 0;    private List<?> list;//这里的 List中 不给出具体的类型,以可以存放多种类型的对象    public int getPageNo() {        return pageNo;    }    public void setPageNo(int pageNo) {        this.pageNo = pageNo;    }    public int getPageSize() {        return pageSize;    }    public void setPageSize(int pageSize) {        this.pageSize = pageSize;    }    public int getTotalCount() {        return totalCount;    }    public void setTotalCount(int totalCount) {        this.totalCount = totalCount;    }    /**     *   totalCount     pageSize       totalPage     *       0             5               1     *       95            5               10     *       100           5               10     *      * @return     */    //总页数    public int getTotalPage() {        totalPage = totalCount/pageSize;        //考虑页面数据条数小于每页显示的条数,和查询总数据条数不能够整除每页显示条数时        if(totalPage==0 || totalCount%pageSize!=0){            totalPage++;        }        return totalPage;    }    public void setTotalPage(int totalPage) {        this.totalPage = totalPage;    }    public int getStartNum() {        return (pageNo - 1)*pageSize;    }    public void setStartNum(int startNum) {        this.startNum = startNum;    }    public int getEndNum() {        return pageNo*pageSize +1;    }    public void setEndNum(int endNum) {        this.endNum = endNum;    }    public List<?> getList() {        return list;    }    public void setList(List<?> list) {        this.list = list;    }}

业务层代码:

public Page selectItemByCondition(QueryCondition qc) {        // 查询当前条件下的总记录数        Integer totalCount = itemDao.selectItemByConditionCount(qc);        // 创建分页的page对象 把已知的条件设置一下        Page page = new Page();        // 设置当前页码        page.setPageNo(qc.getPageNo());// 页码数传递来的        // 设置总记录数        page.setTotalCount(totalCount);        // 获得开始行号和结束行号        Integer startNum = page.getStartNum();        Integer endNum = page.getEndNum();        qc.setStartNum(startNum);        qc.setEndNum(endNum);        // 查询到的结果集        List<EbItem> itemLIst = itemDao.selectItemByCondition(qc);        page.setList(itemLIst);        return page;    }
原创粉丝点击