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

2023-11-17

目录

一. 效果预览

​编辑 二. 实现基本分页

2.1 分页sql

 --每页3条  取第二页

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

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

 2.2 万能公式

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

②前端代码

2.4 末页实现&优化

①底层代码

②前端优化

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

3.1 确定sql语句

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

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

3.2 代码实现

①底层代码

         模糊查询的分页         

②前端优化

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


一. 效果预览


 


 


 二. 实现基本分页

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<Goods> page(int pageIndex,int pageSize,String str,String colName){
            List<Goods> 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<Goods> ls = igd.page(pageIndex, pageSize);

        //把当前页码存起来

        req.setAttribute("pageIndex,"pageIndex)

        
    } 

②前端代码

<!-- 分页 -->
        <nav aria-label="Page navigation example">
         <ul class="pagination justify-content-center pagination-lg">
        <li class="page-item" ><a class="page-link" href="goods.do?pid=1">首页</a></li>
          <li class="page-item " id="prev"><a class="page-link" href="goods.do?pid=$goods.do?pid=${pageIndex-1}">上一页</a></li>
          <li class="page-item "><a class="page-link text-info"><span id="ys"></span>/<span id="max"></span></a></li>
          <li class="page-item " id="next"><a class="page-link" href="goods.do?pid=1"${pageIndex+1}>下一页</a></li>
          <li class="page-item"><a class="page-link" href="goods.do?pid=${max}">末页</a></li>
  </ul>
</nav>

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

②前端优化

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

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<Goods> page(int pageIndex,int pageSize,String str,String colName){
            List<Goods> 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);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb12(实现基础分页&模糊查询的分页) 的相关文章

  • Spring JDBC 模板。如何获取pl/sql脚本的结果变量

    我正在使用 NamedParameterJdbcTemplate 来运行 pl sql 脚本 但我不知道如何获取out变量的值 id out 提前致谢 String script declare begin if myFunc id in
  • 我在使用 JavaFX 绘制十字时遇到问题

    我正在尝试编写代码 在网格上对角绘制 3 个形状 前两个形状是正方形和圆形 我能做到 然而 第三种形状让我有些悲伤 我应该画一个十字 T 版本 而不是 X 每次我写出代码时 它看起来就像一个侧面 我知道我只是错过了一些简单的东西 但我真的很
  • Android:对于具有 LinearLayout 定义的成员的 ListView,上下文菜单不显示?

    我有一个 ListActivity 和 ListView 并且我已将一些数据绑定到它 数据显示得很好 而且我还为视图注册了一个上下文菜单 当我将列表项显示为简单的 TextView 时 它工作正常
  • JTree ConvertValueToText 返回在更改时被截断

    我有一个自定义树实现convertValueToText 此实现取决于某些全局状态 如果返回的字符串比先前返回的字符串更长 实际上我认为更宽 因为以像素为单位触发它 则文本将被截断并用 填充 当重绘是由 取消 选择元素或某个元素引起时 情况
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • 遭受xss攻击后如何恢复站点?

    最近我正在研究XSS攻击以及它们对网站的破坏性有多大 让我惊讶的是 网络 even SO 充满了关于如何防止xss攻击但没有相关资源说明如何在网站受到 xss 攻击后恢复网站 我遇到过一些事情 比如 将备份网站代码上传回服务器 下载整个网站
  • Eclipse RCP - 将视图与编辑器区域堆叠?

    在开发 Eclipse RCP 应用程序时 是否可以将视图与编辑器区域堆叠在一起 像这样 我有多个列表 表格 我想创建一种预览组合 当通过单击鼠标选择列表上的项目时 我希望我的预览合成显示该项目的数据 如果用户双击某个项目 我想在预览合成后
  • 我可以使用 Selenium Webdriver 测试元素的顺序吗?

    有一个表单 其中有 3 个字段 具有 3 个不同的 ID fieldset div div fieldset
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • 如何在 Java 中使用 HTML 解析器和 Apache Tika 来提取所有 HTML 标签?

    我下载了 tika core 和 tika parser 库 但找不到将 HTML 文档解析为字符串的示例代码 我必须删除网页源的所有 html 标签 我能做些什么 如何使用 Apache Tika 进行编码 您想要 html 文件的纯文本
  • 在 java 8 下使用泛型出现类型错误,但在 java 7 下则不然

    我有一段代码可以在 java 7 下编译良好 但不能在 java 8 下编译 这是一个独立的重现示例 我已经采用了显示此问题的真实代码并删除了所有实现 import java util Iterator class ASTNode
  • java.lang.ClassNotFoundException: org.jboss.logging.Logger

    我有一个奇怪的问题 我有一个JMS https en wiktionary org wiki JMS客户端应用程序和MDB https en wikipedia org wiki Enterprise JavaBeans Message d
  • Java 声音可视化器

    我正在尝试制作一个java声音可视化工具 但我完全不知道如何在实时处理音频后立即从提取的音频中获取字节 我可以将程序与 wav 文件同步 但这不是我想要做的 我想用程序生成声音 然后播放它 而不将其保存在任何地方 谢谢您的帮助 本文可以帮助
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 按钮悬停和按下效果 CSS Javafx

    我是 CSS 新手 为按钮定义了以下 CSS 样式 其中id并且应用了自定义样式 但不应用悬停和按下效果 bevel grey fx background color linear gradient f2f2f2 d6d6d6 linear
  • 在Java内存管理中,“PS”代表什么?

    每当我看到 Java 中对内存的引用时 各种空格总是以 PS 为前缀 PS 是什么意思 它开始困扰我 到目前为止我唯一的猜测是 泳池空间 但这将是多余的 例子 PS伊甸园空间 PS 幸存者空间 PS 终身空间 老一代 PS Perm Gen
  • 如何在 Hibernate 中自动递增复合主键中的 Id?

    我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA

随机推荐

  • 如何在VS 2017运行别人的C语言代码

    如何在VS 2017运行别人的C语言代码 我们在使用VS 2017的时候 只有C 项目没有C项目 如何运行从网上下载的别人的C语言项目代码呢 经过查找资料后 经过如下具体步骤 便能在VS 2017里运行C程序了 目录 如何在VS 2017运
  • ubuntu1804安装python3.8+odoo14

    如题 博主废了不少劲 折腾了一个上午终于搞定了 本次采用环境是ubuntu1804系统的docker容器 并且容器内部已更换阿里源 编辑阿里源 vi etc apt sources list 然后粘贴下面内容 再保存 deb http mi
  • 打印图像模糊问题解决方法

    思路 核心 图像转换 1 修改图像dpi值 2 使用高质量的双三次插值法 3 指定高质量 C Code 如下
  • 期货交易的主要特征(期货交易特征五大特征)

    期货交易的特点有哪些 一 合约标准化 期货交易是通过买卖期货合约进行的 而期货合约是标准化的 期货合约标准化指的是除价格外 期货合约的所有条款都是预先由期货交易所规定好的 具有标准化的特点 二 交易集中化 期货交易必须在期货交易所内进行 期
  • NGINX代理导致 获取不到请求头中的token信息

    原因 NGINX对header有所限制 下划线 不支持 解决方式1 请求头参数不用带下划线参数 解决方式2 在nginx里的nginx conf配置文件中的http部分中添加如下配置 underscores in headers on 默认
  • 生信人的20个R语言习题

    生信人的20个R语言习题 题目原文 http www bio info trainee com 3409 html 参考答案 https www jianshu com p dd4e285665e1 https www jianshu co
  • 多变量处理的LASSO方法

    1 lasso方法 其中 因变量是Y 自变量是X 数据中的变量众多 但如何选择X 就使用了lasso lasso能够对变量进行筛选和对模型的复杂程度进行降低 这里的变量筛选是指不把所有的变量都放入模型中进行拟合 而是有选择的把变量放入模型从
  • Longest Common Substring

    给出两个字符串 找到最长公共子串 并返回其长度 注意事项 子串的字符应该连续的出现在原字符串中 这与子序列有所不同 Lintcode上的一道题目 非常经典 需要找到最长的连续公共子串的长度 因为有两个序列且前后顺序不可以打乱 所以为双序列问
  • ESP8266基础开发(一)---读DHT11温湿度传感器

    注 对于ESP8266开源技术感兴趣的可以加群 我们一起探索交流学习 群号 579932824 群名 ESP8266开源技术交流群 这篇文章的目的是展示如何将DHT11传感器连接到ESP8266并编写一个简单的程序来测量温度和湿度 我们假设
  • 【Git】保姆级教程:如何在 GitHub 上传大文件(≥100M)?(含自己的操作流程)

    文章目录 一 问题导读 二 自己的实际操作流程 2 1 准备工作 2 2 初始化仓库 2 3 安装git lfs 一个仓库里面执行一次就好了 2 4 跟踪一下你要上传 push 的文件或指定文件类型 2 5 添加 gitattributes
  • FPGA开发流程

    流程 设计定义 设计输入 分析和综合 功能仿真 modelsim altera 布局布线 时序仿真 modelsim altera 时序约束 IO分配以及配置文件的生成 配置 烧写FPGA 在线调试 设计定义 二选一多路器 两个输入IO a
  • Amazon SDE实习机会面试经验分享

    我通过大学申请了Amazon SDE实习 在线回合 有一个在线回合 其中包含技术性MCQ和2个编码问题 编码部分非常简单 面试过程中有7 8人入围 第一轮面对面访谈 这一回合持续了一个小时 首先 面试官要求自我介绍 后来有3个编码问题 对包
  • HTML img 强制刷新加载

    img刷新机制为url变化则刷新 当url不变时想要刷新可做如下处理 let url http pic27 nipic com 20130321 9678987 225139671149 2 jpg const time new Date
  • 浏览器默认行为(原生事件)、浏览器中网页渲染顺序

    一 浏览器的原生事件 1 浏览器中存在一些默认行为 比如 文本可复制 图片可 拖拽 这是伪拖拽 实际并没有移动 松开鼠标后 会弹出新的链接 右键会出现菜单 a标签单击会跳转等 2 为什么要阻止默认行为 如某些时候 我们需要写一个a标签 但是
  • docker的联合文件系统(UnionFS)

    docker最大的贡献就是定义了容器镜像的分层的存储格式 docker镜像技术的基础是联合文件系统 UnionFS 其文件系统是分层的 这样既可以充分利用共享层 又可以减少存储空间占用 联合挂载系统的工作原理 读 如果文件在upperdir
  • vue常用标签

    一 内容绑定 1 v text 会替换掉html的内容 eg p p 2 插值表达式占位内容 放在html中 eg p username p 3 v html 可将html内容渲染到页面 v text和 不支持 eg div div con
  • 用于通过声波捕获显示视觉,触觉和音频的全息显示(A volumetric display for visual, tactile and audio presentation using acous)

    Ryuji Hirayama Diego Martinez Plasencia Nobuyuki Masuda Sriram Subramanian 2019年1月31日接收 2019年8月15日收录 2019年11月13日网上公开 摘要
  • java token redis生成算法_java秒杀系列(1)- 秒杀方案总体思路

    前言 首先 要明确一点 高并发场景下系统的瓶颈出现在哪里 其实主要就是数据库 那么就要想办法为数据库做层层防护 减轻数据库的压力 一 简单图示 我用一个比较简单直观的图来表达大概的处理思路 二 生产环境中秒杀抢购的解决方案 1 前端 1 动
  • Qt自定义滑动条

    最近要用到滑动条 Qt自带的QSlider虽然能满足需求 但是操作起来有很多不舒服的地方 于是在它的基础上改了改 分享给大家使用 先放效果图 在QSlider的基础上 改变了样式 绘制了刻度 增加了取整功能 只需要微调就能适应各种需求 头文
  • JavaWeb12(实现基础分页&模糊查询的分页)

    目录 一 效果预览 编辑 二 实现基本分页 2 1 分页sql 每页3条 取第二页 由于伪列不能作用与大于符号也不能作用于between and 因此需要将伪列 gt 名列 2 2 万能公式 2 3 首页 上一页 下一页实现 前端代码 2