JavaWeb12(实现基础分页&模糊查询的分页)

目录

一. 效果预览

​编辑 二. 实现基本分页

2.1 分页sql

 --每页3条  取第二页

--由于伪列不能作用与大于符号也不能作用于between....and

--因此需要将伪列----->名列

 2.2 万能公式

 2.3 首页&上一页&下一页实现

②前端代码

2.4 末页实现&优化

①底层代码

②前端优化

 三.实现模糊查询(下拉框)的分页

3.1 确定sql语句

--查询简介中含有'商'的商品 每页2条  取第二页

--查询简介中含有'你'的商品 每页3条  取第二页

3.2 代码实现

①底层代码

         模糊查询的分页         

②前端优化

        拿到模糊查询分页后的商品集合


一. 效果预览

JavaWeb12(实现基础分页&模糊查询的分页)_第1张图片


 JavaWeb12(实现基础分页&模糊查询的分页)_第2张图片


 JavaWeb12(实现基础分页&模糊查询的分页)_第3张图片


JavaWeb12(实现基础分页&模糊查询的分页)_第4张图片 二. 实现基本分页

2.1 分页sql

 --每页3条  取第二页

--由于伪列不能作用与大于符号也不能作用于between....and

--因此需要将伪列----->名列

select * from(
       select a.*,rownum as rid from tb_goods a where gname like '%商%'
) b where b.rid between 5 and 8

 2.2 万能公式

/*

*如果每页3条即pageSize=3

*当pageIndex=1:1-3

*当pageIndex=2:4-6

*当pageIndex=3:7-9

*

*如果每页5条即pageSize=5

*当pageIndex=1:1-5

*当pageIndex=2:6-10

*当pageIndex=3:11-15

*/

(pageIndex-1)*pageSize+1-------(pageIndex*pageSize)

 2.3 首页&上一页&下一页实现

①底层代码

    /**
         * 模糊查询的分页
         * @param pageIndex 设置第几页
         * @param pageSize  每页多少条数据
         * @param str 关键字
         * @param colName 列名
         * @return 商品集合
         */

        public List page(int pageIndex,int pageSize,String str,String colName){
            List ls = new ArrayList<>();
            try {
                con=DBHelper.getCon();
                String sql="select * from(\r\n" + 
                        "       select a.*,rownum as rid from tb_goods a where "+colName+" like '%"+str+"%' order by gid desc \r\n" + 
                        ")b where b.rid between ? and ?";
                ps=con.prepareStatement(sql);
                //给占位符赋值
                ps.setInt(1, (pageIndex-1)*pageSize+1);
                ps.setInt(2, (pageIndex*pageSize));
                //System.out.println("SQL:"+sql); 打印出来为null 在前端要判断 goodsServlet
                rs=ps.executeQuery();
                while(rs.next()) {
                    Goods g = new Goods();
                    g.setGid(rs.getInt(1));
                    g.setGname(rs.getString(2));
                    g.setGprice(rs.getDouble(3));
                    g.setGinfo(rs.getString(4));
                    g.setGtime(rs.getString(5));
                    g.setGpath(rs.getString(6));
                    g.setGxl(rs.getInt(7));
                    g.setTid(rs.getInt(8));
                    ls.add(g);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                DBHelper.myClose(con, ps, rs);
            }
            return ls;
            
        }

    
        int pageIndex=1;//当前页 第几页
        int pageSize=3;//每页多少条数据
        
        //接收参数
        String pid = req.getParameter("pid");
        
        if(pid!=null) {//说明点了"首页"/"上一页"/"下一页"/"末页"

            //改变页码
            pageIndex=Integer.parseInt(pid);
        }
       
       //拿到集合
      
 List ls = igd.page(pageIndex, pageSize);

        //把当前页码存起来

        req.setAttribute("pageIndex,"pageIndex)

        
    } 

②前端代码


        

2.4 末页实现&优化

①底层代码

/**
         * 获取总行数
         * @param str 表名等
         * @return 总行数
         */

        public int getRows(String str) {
            int n = 0;
            try {
                con=DBHelper.getCon();
                String sql="select count(*) from "+str;
                ps=con.prepareStatement(sql);
                rs=ps.executeQuery();
                if(rs.next()) {
                    n=rs.getInt(1);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                DBHelper.myClose(con, ps, rs);
            }
            return n;
        }

---【在业务逻辑层biz做处理】---

/*

*拿到最大页码

*@param tabName 表名等
* @param pageSize 每页多少条数据

*@return 最大页码

*/

public int getMax(String str,int pageSize) {
            //拿到总行数
            int rows = igd.getRows(str);
            //计算总页数
            int max = rows/pageSize;//10/3=3
            if(rows%pageSize!=0) {//除不尽
                max++;//多加一页
            }
            return max;
        }

 //拿到最大页码

 int max = igd.getMax("tb_goods ",pageSize)

//把最大页码存起来

req.setAttribute("max", max);

②前端优化

JavaWeb12(实现基础分页&模糊查询的分页)_第5张图片

 三.实现模糊查询(下拉框)的分页

3.1 确定sql语句

--查询简介中含有'商'的商品 每页2条  取第二页

select * from(
       select a.*,rownum as rid from tb_goods a where gname like '%商%'
) b where b.rid between 5 and 8

--查询简介中含有'你'的商品 每页3条  取第二页
select * from(
       select a.*,rownum as rid from tb_goods a where gname like '%你%'
) b where b.rid between 1 and 3

3.2 代码实现

①底层代码

/**
         * 模糊查询的分页
         * @param pageIndex 设置第几页
         * @param pageSize  每页多少条数据
         * @param str 关键字
         * @param colName 列名
         * @return 商品集合
         */

        public List page(int pageIndex,int pageSize,String str,String colName){
            List ls = new ArrayList<>();
            try {
                con=DBHelper.getCon();
                String sql="select * from(\r\n" + 
                        "       select a.*,rownum as rid from tb_goods a where "+colName+" like '%"+str+"%' order by gid desc \r\n" + 
                        ")b where b.rid between ? and ?";
                ps=con.prepareStatement(sql);
                //给占位符赋值
                ps.setInt(1, (pageIndex-1)*pageSize+1);
                ps.setInt(2, (pageIndex*pageSize));
                //System.out.println("SQL:"+sql); 打印出来为null 在前端要判断 goodsServlet
                rs=ps.executeQuery();
                while(rs.next()) {
                    Goods g = new Goods();
                    g.setGid(rs.getInt(1));
                    g.setGname(rs.getString(2));
                    g.setGprice(rs.getDouble(3));
                    g.setGinfo(rs.getString(4));
                    g.setGtime(rs.getString(5));
                    g.setGpath(rs.getString(6));
                    g.setGxl(rs.getInt(7));
                    g.setTid(rs.getInt(8));
                    ls.add(g);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                DBHelper.myClose(con, ps, rs);
            }
            return ls;
            
        }

②前端优化

//拿到模糊查询分页后的商品集合
 List<Goods> ls = igd.page(pageIndex, pageSize, str, xl);

你可能感兴趣的:(javaWeb专栏,java,web,数据库,前端,eclipse)