数据分页

 


数据分页

数据分页

控制台版本的分页

数据分页

封装pageresult对象

数据分页

数据分页数据分页

实行后台数据分页设计

数据分页

数据分页

数据分页

实现前台数据分页原理

数据分页

数据分页

数据分页数据分页

数据分页

数据分页

高级查询加数据分页

数据分页

数据分页

数据分页

数据分页

解决高级查询翻页后数据丢失的问题

数据分页

数据分页

数据分页

数据分页

数据分页

数据分页

数据分页

详细代码:

前台代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

   <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Insert title here</title>

    <script type="text/javascript">

        function go(pageno){

            document.getElementById("currentpage").value=pageno;

            document.forms[0].submit();

        }

    </script>

</head>

<body>

    <h1>商品信息</h1>

    <form action="/product?cmd=list" method="post">

        商品名称:<input type="text" name="name" value="${go.productName }" /><br>

        商品价格:<input type="nmuber" name="minsale" value="${go.minsale }"/>-<input type="nmuber" name="maxsale" value="${go.maxsale }"/><br>

        <select name="yaoshi">

            <option value="-1">所有分类</option>

            <c:forEach items="${dirdao }" var="item">

                <option value="${item.id }" ${item.id==go.dirId?"selected":"" }>${item.dirName }</option>

            </c:forEach>

        </select>

        关键字查询:<input type="text" name="keyword" value="${go.keyword}" /><br>

        <input type="submit" value="查询"/>

        

    <br>

    <a href="/product?cmd=edit">添加商品</a>

    <table cellpadding="0" cellspacing="0" border="1" width="80%">

        <tr style="background-color:orange;">

            <th>货品编号</th>

            <th>货品名称</th>

            <th>货品品牌</th>

            <th>货品分类</th>

            <th>供应商</th>

            <th>零售价</th>

            <th>成本价</th>

            <th>折扣</th>

            <th>操作</th>

        </tr>

        <c:forEach items="${pageresult.data}" var="item" varStatus="vs">

        <tr style="background-color:${vs.count%2==0?'pink':''};">

            <td>${item.id}</td>

            <td>${item.productName}</td>

            <td>${item.brand}</td>

            <td>

            

                <c:choose>

                    <c:when test="${item.dir_id==1}">

                        鼠标

                    </c:when>

                    <c:when test="${item.dir_id==2}">

                        无线鼠标

                    </c:when>

                    <c:when test="${item.dir_id==3}">

                        有线鼠标

                    </c:when>

                    <c:when test="${item.dir_id==4}">

                        游戏鼠标

                    </c:when>

                    <c:when test="${item.dir_id==5}">

                        机械鼠标

                    </c:when>

                </c:choose>

                

                

            </td>

            <td>${item.supplier}</td>

            <td>${item.salePrice}</td>

            <td>${item.costPrice}</td>

            <td>${item.cutoff}</td>

            <td style="align-content: center;"><a href="/product?cmd=delete&id=${item.id}">删除</a>||<a href="/product?cmd=edit&id=${item.id}">编辑</a></td>

          </c:forEach>

        </tr>

        <tr>

            <td colspan="9" align="center">

                <a href="javascript:go(1);">首页</a>

                <a href="javascript:go(${pageresult.lastpage });">上一页</a>

                

                <c:forEach begin="${pageresult.beginIndex }" end="${pageresult.endIndex }" var="pagenumber">

                    <c:if test="${pagenumber!=pageresult.currentpage }">

                    <a  href="javascript:go(${pagenumber });">${pagenumber }</a>

                    </c:if>

                    <c:if test="${pagenumber==pageresult.currentpage }">

                        <span style="color:red;font:italic bold;">

                            ${pagenumber }

                        </span>

                    </c:if>

                </c:forEach>

                <a href="javascript:go(${pageresult.nextpage });">下一页</a>

                <a href="javascript:go(${pageresult.endpage });">尾页</a>

                当前第${pageresult.currentpage }页,一共${pageresult.endpage }页,共${pageresult.totalcount }数据

                跳转到第<input name="currentpage" id="currentpage" type="number" min="1" max="${pageresult.endpage }" value="${pageresult.currentpage }"/>

                <input type="button" value="GO" onclick="go();"/>

                每页

                <select name="page" onchange="go();">

                    <c:forEach items="${pageresult.pagedata}" var="item">

                        <option ${item==pageresult.pagesize?"selected":"" }>${item }</option>

                    </c:forEach>

                </select>

                条数据

            </td>

        </tr>

    </table>

        </form>

</body>

</html>

分页类-PageIndex类

package product.productquery.page;

/**

 * 页码的开始索引和接受索引

 */

public class PageIndex {

    private Integer beginIndex;

    private Integer endIndex;

    

    /**

     * 首页 上页 [1] 2 3 4 5 6 7 8 9 10 下页 末页 当前第1/18页一共53条记录 每页5 条

     * @param totalIndexCount   总索引数

     * @param currentPage       当前页

     * @param totalPage         总页数

     * @return

     */

    public static PageIndex getPageIndex(Integer totalIndexCount,

            Integer currentPage, Integer totalPage) {

        Integer startPageIndex = currentPage

                - (totalIndexCount % 2 == 0 ? totalIndexCount / 2 - 1 : totalIndexCount / 2);

        Integer endPageIndex = currentPage + totalIndexCount / 2;

        if (startPageIndex < 1) {

            startPageIndex = 1;

            if (totalPage >= totalIndexCount)

                endPageIndex = totalIndexCount;

            else

                endPageIndex = totalPage;

        }

        if (endPageIndex > totalPage) {

            endPageIndex = totalPage;

            if ((endPageIndex - totalIndexCount) > 0)

                startPageIndex = endPageIndex - totalIndexCount + 1;

            else

                startPageIndex = 1;

        }

        return new PageIndex(startPageIndex, endPageIndex);

    }

    public PageIndex(Integer beginIndex, Integer endIndex) {

        this.beginIndex = beginIndex;

        this.endIndex = endIndex;

    }

    public Integer getBeginIndex() {

        return beginIndex;

    }

    public Integer getEndIndex() {

        return endIndex;

    }

}

 

分页基本数据类

package product.productquery.page;

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

import lombok.Data;

import lombok.Getter;

@Getter

public class pageresult {

    private List<?>data;

    private Integer totalcount;

    private Integer currentpage=1;

    private Integer pagesize=5;

    private Integer beginpage=1;

    private Integer endpage;

    private Integer lastpage;

    private Integer nextpage;

    private Integer beginIndex;

    private Integer endIndex;

    

    private List<Integer>pagedata=Arrays.asList(3,5,6,9,10);

    public pageresult(List<?> data, Integer totalcount, Integer currentpage, Integer pagesize) {

        this.data = data;

        this.totalcount = totalcount;

        this.currentpage = currentpage;

        this.pagesize = pagesize;

        endpage=this.totalcount%this.pagesize==0?          this.totalcount/this.pagesize:this.totalcount/this.pagesize+1;

        lastpage=currentpage-1>=1?currentpage-1:1;

        nextpage=currentpage+1<=endpage?currentpage+1:endpage;

        PageIndex index=PageIndex.getPageIndex(3, currentpage, endpage);

        beginIndex=index.getBeginIndex();

        endIndex=index.getEndIndex();

    }

    

}

 

productquery类

package product.productquery;

 

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.List;

 

import org.apache.commons.lang3.StringUtils;

 

import lombok.Data;

import lombok.Getter;

import lombok.Setter;

 

@Data

public class productquery extends queryobject{

    private String productName;

    private BigDecimal minsale;

    private BigDecimal maxsale;

    private Long dirId=-1L;

    private    String keyword;

    

    public Boolean haslength(String value) {

        return value!=null&&!"".equals(value);

    }

    public void custerize()

    {

        

        if(haslength(productName))

        {

            /*

            connection.add(" productName like ? ");

            para.add("%"+productName+"%");*/

            

            super.addquery(" productName like ? ", "%"+productName+"%");

        }

        if(haslength(keyword))

        {

            /*

            connection.add(" productName like ? ");

            para.add("%"+productName+"%");*/

            

            super.addquery(" (productName like ? OR brand like ?) ", "%"+keyword+"%","%"+keyword+"%");

        }

        if(minsale!=null)

        {/*

            connection.add("  salePrice >= ? ");

            para.add(minsale);*/

            super.addquery("  salePrice >= ? ", minsale);

        }

        if(maxsale!=null)

        {

            //connection.add(" salePrice <= ?");

            //para.add(maxsale);

            super.addquery("  salePrice <= ? ", maxsale);

        }

        if(dirId!=-1)

        {

            //connection.add(" dir_id= ?");

            //para.add(dirId);

            super.addquery(" dir_id= ?", dirId);

        }

    }

}

 

抽取类

package product.productquery;

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

import org.apache.commons.lang3.StringUtils;

 

import lombok.Getter;

import lombok.Setter;

 

public class queryobject {

    @[email protected]

    private Integer currentpage=1;

    @[email protected]

    private Integer pagesize=5;

    private List<Object> para=new ArrayList<>();

    private List<String> connection=new ArrayList<>();

    

    public String getquerystring()

    {

        StringBuilder sql=new StringBuilder(100);

        

        this.custerize();

        

        if(connection.size()==0)

        {

            return "";

        }

        String query=StringUtils.join(connection," AND ");

 

        return sql.append(" WHERE ").append(query).toString();

    }

    public void custerize() {

        // TODO Auto-generated method stub

        

    }

    public List<Object>getpara(){

        return para;

    }

    public void addquery(String connection,Object...param) {

        this.connection.add(connection);

        

        this.para.addAll(Arrays.asList(param));

    }

}

 

servlet

package product.servlet;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import java.math.BigDecimal;

import java.util.List;

import java.util.function.Supplier;

 

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import product.DAO.ProductImpl;

import product.DAO.ProductdirImpl;

import product.DAO.Product.IProduct;

import product.DAO.Product.IProductdir;

import product.domain.Productach;

import product.productquery.productquery;

import product.productquery.page.pageresult;

 

@WebServlet("/product")

public class servlet extends HttpServlet{

    private IProduct dao;

    private IProductdir dirdao;

    private static final long serialVersionUID = 1L;

   

    @Override

    public void init() throws ServletException {

        // TODO Auto-generated method stub

        dao=new ProductImpl();

        dirdao=new ProductdirImpl();

    }

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // TODO Auto-generated method stub

         req.setCharacterEncoding("UTF-8");

         String cmd=req.getParameter("cmd");

        

         switch (cmd) {

            case "edit":

                edit(req, resp);

                break;

            case "delete":

                delete(req, resp);

                break;

            case "saveORupdate":

                saveORupdate(req, resp);

                break;

            case "list":

                 list(req, resp);

                break;

            default:

                 list(req, resp);

                 break;

            }

    }

    public void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // TODO Auto-generated method stub

        productquery go=new productquery();

        this.parainit(req,go);

        req.setAttribute("go", go);

        //List<Productach> list=dao.search(go);

        pageresult pageresult=dao.resudesign(go);

        req.setAttribute("pageresult", pageresult);

        req.setAttribute("dirdao", dirdao.list());

        req.setAttribute("go", go);

        req.getRequestDispatcher("/WEB-INF/view/product/product.jsp").forward(req, resp);

        

    }

    private void parainit(HttpServletRequest req,productquery go) {

        try {

            req.setCharacterEncoding("UTF-8");

        } catch (UnsupportedEncodingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        String name=req.getParameter("name");

        String minsale=req.getParameter("minsale");

        String maxsale=req.getParameter("maxsale");

        String sele=req.getParameter("yaoshi");

        String keyword=req.getParameter("keyword");

        String currpage=req.getParameter("currentpage");

        String psize=req.getParameter("page");

        if(currpage!=null&&!"".equals(currpage)) {

            go.setCurrentpage(Integer.valueOf(currpage));

            

        }

        

        

 

        if(psize!=null&&!"".equals(psize)) {

            go.setPagesize(Integer.valueOf(psize));

            

        }

        if(haslength(name))

        {

            go.setProductName(name);

        

        }

        if(minsale!=null&&!"".equals(minsale))

        {

            go.setMinsale(new BigDecimal(minsale));

        }

        if(maxsale!=null&&!"".equals(maxsale))

        {

            go.setMaxsale(new BigDecimal(maxsale));

        }

        if(sele!=null&&!"".equals(sele))

        {

            go.setDirId(Long.valueOf(sele));

        }

        if(keyword!=null&&!"".equals(keyword))

        {

            go.setKeyword(keyword);

        }

    }

    public Boolean haslength(String value) {

        return value!=null&&!"".equals(value);

    }

    public void saveORupdate(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        // TODO Auto-generated method stub

        String id=req.getParameter("num");

        String productName=req.getParameter("name");

        String brand=req.getParameter("brand");

        String kind=req.getParameter("kind");

        String supplier=req.getParameter("supply");

        String costsale=req.getParameter("costsale");

        String sale=req.getParameter("sale");

        String cost=req.getParameter("cost");

    

        ProductImpl dao=new ProductImpl();

        

        Productach pro=new Productach(0,productName,Long.valueOf(kind),Double.valueOf(sale),

                supplier,brand,Double.valueOf(costsale),

                Double.valueOf(cost));

    

    

        if(id!=null&&!"".equals(id))

        {

            dao.update(Long.valueOf(id), pro);

        }else {

            

            dao.insert(pro);

        }

        resp.sendRedirect("/product?cmd=list");

    }

    public void delete(HttpServletRequest req, HttpServletResponse resp) {

        // TODO Auto-generated method stub

        String id=req.getParameter("id");

        

        dao.delete(Long.valueOf(id));

        try {

            resp.sendRedirect("/product?cmd=list");

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    public void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // TODO Auto-generated method stub

        String id=req.getParameter("id");

        if(id!=null&&!"".equals(id))

        {

            Productach pro=dao.getone(Long.valueOf(id));

            

            req.setAttribute("pro",pro);

        }

    

            req.getRequestDispatcher("/WEB-INF/view/product/saveORupdate.jsp").forward(req, resp);

        

    }

}

 

接口

package product.DAO.Product;

 

import java.math.BigDecimal;

import java.util.List;

 

import product.domain.Productach;

import product.productquery.productquery;

import product.productquery.page.pageresult;

 

public interface IProduct {

   void insert(Productach pro);

   void delete(long id);

   void update(long id,Productach pro);

   Productach getone(long id);

   List<Productach> list();

   List<Productach> search(productquery go);

   pageresult query(Integer currentpage,Integer pagesize);

   pageresult resudesign(productquery go);

}

实现类

package product.DAO;

 

import java.math.BigDecimal;

import java.security.GuardedObject;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

 

import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause;

 

import product.DAO.Product.IProduct;

import product.domain.Productach;

import product.javabean.bean;

import product.javabean.beanlist;

import product.javabean.type;

import product.productquery.productquery;

import product.productquery.page.pageresult;

import product.template.template;

 

public class ProductImpl implements IProduct{

 

    @Override

    public void insert(Productach pro) {

        // TODO Auto-generated method stub

        String sql="INSERT INTO product(productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)VALUES(?,?,?,?,?,?,?)";

        template.DMLoperate(sql, pro.getProductName(),pro.getDir_id(),pro.getSalePrice(),pro.getSupplier(),pro.getBrand(),pro.getCutoff(),pro.getCostPrice());

    }

 

    @Override

    public void delete(long id) {

        // TODO Auto-generated method stub

        String sql="DELETE FROM product where id=?";

        template.DMLoperate(sql, id);

    }

 

    @Override

    public void update(long id, Productach pro) {

        // TODO Auto-generated method stub

        String sql="UPDATE product set productName=?,dir_id=?,salePrice=?,supplier=?,brand=?,cutoff=?,costPrice=? where id=?";

        template.DMLoperate(sql, pro.getProductName(),pro.getDir_id(),pro.getSalePrice(),pro.getSupplier(),pro.getBrand(),pro.getCutoff(),pro.getCostPrice(),id);

    }

 

    @Override

    public Productach getone(long id) {

        // TODO Auto-generated method stub

        String sql="SELECT *FROM  product where id=?";

    return     template.DQLoperator(sql, new bean<>(Productach.class), id);

        

    }

 

    @Override

    public List<Productach> list() {

        // TODO Auto-generated method stub

        String sql="SELECT *FROM  product";

        return     template.DQLoperator(sql, new beanlist<>(Productach.class));

        

    }

 

 

    

 

    @Override

    public List<Productach> search(productquery go) {

        // TODO Auto-generated method stub

    

        String sql="SELECT *FROM product"+go.getquerystring();

    

        return template.DQLoperator(sql, new beanlist<Productach>(Productach.class), go.getpara().toArray());

    }

    

    public Boolean haslength(String value) {

        return value!=null&&!"".equals(value);

    }

 

    @Override

    public pageresult query(Integer currentpage, Integer pagesize) {

        // TODO Auto-generated method stub

        String countsql="SELECT COUNT(*) FROM product";

        Integer totalcount=template.DQLoperator(countsql, new type<Long>() {

 

            @Override

            public Long hanlder(ResultSet rs) throws Exception {

                // TODO Auto-generated method stub

                if(rs.next()){

                    return rs.getLong(1);

                }

                return 0L;

            }

            

        }).intValue();

        

        String resultsql="SELECT *FROM product LIMIT ?,?";

        Object []para= {(currentpage-1)*pagesize,pagesize};

        List<Productach> pro=template.DQLoperator(resultsql, new beanlist<>(Productach.class), para);

        return new pageresult(pro,totalcount,currentpage,pagesize);

    }

 

    @Override

    public pageresult resudesign(productquery go) {

        // TODO Auto-generated method stub

        String countsql="SELECT COUNT(*) FROM product"+go.getquerystring();

        Integer totalcount=template.DQLoperator(countsql, new type<Long>() {

 

            @Override

            public Long hanlder(ResultSet rs) throws Exception {

                // TODO Auto-generated method stub

                if(rs.next()) {

                    System.out.println(rs.getLong(1));

                    return rs.getLong(1);

             }

            return 0L;

           }

        }, go.getpara().toArray()).intValue();

        if(totalcount==0){

            return null;

        }

        String resultsql="SELECT *FROM product "+go.getquerystring()+" LIMIT ?,?";

        go.getpara().add((go.getCurrentpage()-1)*go.getPagesize());

        go.getpara().add(go.getPagesize());

        List<Productach>data=template.DQLoperator(resultsql, new beanlist<>(Productach.class), go.getpara().toArray());

        return new pageresult(data, totalcount, go.getCurrentpage(), go.getPagesize());

    }

 

    

}