需求:

  • 根据两个条件查询。

  • 根据查询的结果分页,并记住查询条件。

大体流程是这样的:

  • 第一次打开时,默认分页显示所有信息,这时候点击末页会取到最后一页数据。

  • 当填写或选择了查询条件时,根据条件取出符合条件的所有数据并分页。这时候点击翻页应该都是这一次查询条件后的数据。

    我写的时候思绪挺乱的,来这里写一写,再理一下思路。

  • 建表,只需要一张,还有对应的实体类。

  • 写前台展示页面。

<body><form action="" method="post">姓名:<input type="text" name="name"/>性别:<select name="sex" ><option value="-1">全部</option><option value="0">男</option><option value="1">女</option>         </select> <input type="submit" value="搜索"/><table><tr><td>序号</td><td>姓名</td><td>性别</td><td>头像</td><td>职业</td></tr><c:forEach items="" var="">... </c:forEach></table></form><a href="">首页</a><a href="">上一页</a>当前页:<a href="">下一页</a><a href="">末页</a> </body>

  • 刚进入项目要显示所有,所以可以写个带参数的欢迎页面index.jsp,
    response.sendRedirect("person?action=getMaxPage&name=&sex=0");
    (name=&sex=-1相当于name=空字符串)。把name和sex传到相应的servlet。

  • 现在来写servlet

public String getMaxPage(HttpServletRequest req,HttpServletResponse resp){resp.setCharacterEncoding("UTF-8");/* 刚进入项目时index.jsp传来name="" 为空,sex=-1*/String name = req.getParameter("name");Integer sex =  Integer.valueOf(req.getParameter("sex"));/*第一步,通过条件得到最大页数。要写一个数据访问的Dao,虚线内是该Dao里获取最大页的方法*/PersonDao pd = new PersonDao();Integer maxPage =  pd.getCount(name, sex, rowPerPage);//rowPerPage是每页要显示的记录条数,可以定义一个全局变量--------------------------------------------------------------------------------------public Integer getCount(String name,Integer sex,Integer size){StringBuffer sb = new StringBuffer("select count(*) from person where 1=1 ");...if(!(name.equals(null)) && !(name.equals("")) ){sb.append(" and name like '%"+name+"%' ");}if(sex != 0){sb.append(" and sex = "+sex+" ");}...}
------------------------------------------------------------------------------------------/*因为还没学Ajax就用session存放条件以记住查询条件*/HttpSession session = req.getSession();session.setAttribute("name", name);session.setAttribute("sex", sex);session.setAttribute("maxPage", maxPage);return "person?action=getPerson";}
  • 得到最大页后,再根据条件获取记录
public String getPerson(HttpServletRequest req,HttpServletResponse resp){PersonDao pd = new PersonDao();HttpSession session = req.getSession();//得到选择条件后的最大页,姓名,性别。会根据每次选择条件的不同而改变。Integer maxPage = (Integer)session.getAttribute("maxPage");String name = (String)session.getAttribute("name");Integer sex = (Integer)session.getAttribute("sex");Integer currPage = 0;//从项目进来后,没有从前台获得currPage,默认为1if (req.getParameter("currPage") == null) { currPage =1;}else{//点击上下页的时候找到此servlet,得到页数。
------------------------------------------------------------<a href="person?action=getPerson&currPage=${currPage+1 }">下一页</a>
------------------------------------------------------------currPage = Integer.valueOf(req.getParameter("currPage")); }if(currPage < 1 ){currPage = 1;} else if(currPage > maxPage){currPage = maxPage;}//通过name,sex,当前页,每页显示的条数导数据库获取数据。List<Person> list =  pd.getPerson(name, sex, currPage, rowPerPage);--------------------------------------------------------------------------------public List<Person> getPerson(String name, Integer sex,Integer currPage,Integer size){StringBuffer sb = new StringBuffer("select * from person where 1=1 ");...//在这里,我们把参数直接传到Dao里面来判断。在我早先写的那篇文章里,是先在servlet判断一次,又到Dao里面判断,实在是多余了。不过"重构代码"不也是一项必须的技能吗。if(!(name.equals(null)) && !(name.equals("")) ){sb.append(" and name like '%"+name+"%' ");}if(sex != 0){sb.append(" and sex = "+sex+" ");}sb.append("  limit ?,? ");String sql = sb.toString();//要注意把sql语句转为String类型。try {conn = DataBaseUtil.getConnection();ps = conn.prepareStatement(sql);//这里就只有两个 ‘?’,不用再判断有几个 ‘?’了。ps.setInt(1, (currPage-1)*size);ps.setInt(2, size);rs = ps.executeQuery();while(rs.next()){...}--------------------------------------------------------------------------------//把得到的数据,送到前台显示。        if(list.size() > 0){req.setAttribute("pList", list);req.setAttribute("currPage", currPage);return "showPerson.jsp";}

早先写的拼接Sql的文章(点我)

Ps:写这篇文章的时候,被打断了了好几次,思路也是断断续续的。不过我会一直更新下去的,在学了Ajax,Jquery后。还有最好是写一个框架来做这些事,不过对接口,反射的理解还不是太深。加油吧!

JSP Servlet 实现模糊动态查询并分页(拼接Sql)相关推荐

  1. mybatis动态查询(分页排序搜索)+分解关联查询+Logback 日志配置(打印sql到控制台)+mybatis新增记录后返回自增的id。批量=11/2~11/20

    一.mybatis动态查询(分页排序搜索) mybatis框架分页实现,有几种方式,最简单的就是利用原生的sql关键字limit来实现,还有一种就是利用interceptor来拼接sql,实现和lim ...

  2. tp3.2.3实现后台的顶部栏目查询,不用拼接sql

    一.背景 基本所有的后台部分,都需要一定的搜索条件,方便客服人员进行搜索.因为对tp不太熟悉,所以也耽误了不少时间.记录一下 二.查询方法 1.以前用laravel查询,都是用类似于拼接sql的方法做 ...

  3. ireport模块之间的动态传参及拼接SQL

    1.有些业务逻辑需要在ireport中判断.所以经常将拼接SQL的任务由Parameters的Default Value Expression来完成 ,如果有子模版,则在子模版参数里面处理,怎么将SQ ...

  4. SpringBoot实现分类搜索(模糊)查询 Pageable分页

    效果图如下: 数据库结构: Student学生表 stu表 sid学生id sname 学生姓名 sex性别 cid班级id address地址 sorts 排序 classes班级表 cid  cn ...

  5. Javaweb15==mysql+mybatis+servlet+axios+fasetjson+vue+elementUI前后端分离,实现列表后端分页、模糊查询后分页、新增、单一/批量删除、修改

    难点:模糊查询后再次分页,并可以选择页数. 最终环境配置: maven3.8:依赖包管理 IDEA2021+JDK8+mysql connector java5+Mysql5+mybatis3.5:从 ...

  6. jsp模糊查询_[内附完整源码和文档] 基于JSP+Servlet校园二手交易平台

    摘 要 本系统采用JSP/servlet技术,是使用Java编程语言编写的一套校园网二手交易平台软件.系统采用的是最近几年流行的B/S开发模式,以互联网方式运行,服务器端只需要安装本系统,而客户端用户 ...

  7. Jsp新闻项目(规范访问分页之模糊查询主题分页查询[客户页面])

    目录 一.规范访问 二.模糊查询分页 1.代码分析 上一章我们有讲到将伪表查询代替之前的模糊查询来进行分页,今天我们要在伪表查询的基础上加上模糊查询,也就是说在模糊查询时也可以分页了 三.主题分页查询 ...

  8. 40.MyBaits懒加载、一二级缓存、模糊查询、分页查询、动态SQL

    MyBaits_Day04 第一节.作业 <!-- 对getAllCateAndGoods做实现--><select id="getAllCateAndGoods" ...

  9. php分页类 seo,HTML_写一个对搜索引擎友好的文章SEO分页类,使用jsp/php/asp等动态程序生成 - phpStudy...

    写一个对搜索引擎友好的文章SEO分页类 使用jsp/php/asp等动态程序生成的页面如何对搜索引擎友好呢?你可能想使用url_rewrite.不过,最好还是让同一个网址在任意时间对应的页面内容都是一 ...

最新文章

  1. 【c语言】求最大最小值
  2. 几个数判断大小_许栩原创2020读书笔记2《魔鬼数学》:极小数的两倍仍然是极小数...
  3. vue 组件间传值、兄弟组件 、bus方式 ( 1 分钟看懂 )
  4. [转载] jstl获取Parameter参数及switch使用
  5. AYOJ N皇后问题
  6. sharepoint_study_5
  7. android 简单对话框实现
  8. 【按键精灵】一步两步脚本教程
  9. 捷联惯导数值更新算法-姿态更新+速度更新+位置更新
  10. MySQL报错:ERROR 3546 (HY000): @@GLOBAL.GTID_PURGED cannot be changed: the new value must be a superset
  11. iPhone/苹果手机不用数据线传输文件到电脑的方法/步骤
  12. tebluea 仪表板如何联动_瑞士定制宝马F900R改装套件Nardo-Blue亮相
  13. Postgresql管理系列-第三章Query Processing(下半部分-join operation介绍)
  14. 宝岛探险(求岛的大小)
  15. 解决Docker镜像缺少字体的问题
  16. 无憾,2019!加油,2020!
  17. 【最小费用最大流】知识点讲解
  18. Python全栈开发之路day1
  19. EasyExcel CellWriteHandler注入CellStyle不生效问题
  20. 使用js实时显示北京时间

热门文章

  1. 2019,IP网络完成智能觉醒
  2. 数据结构实验之排序三:bucket sort SDUT
  3. window7搭建nmap,WARNING报错
  4. 自学前端,学多久可以入职前端工程师
  5. 大数据应用之双色球算奖平台总体设计数据规模估算篇 - 张子良
  6. spring transactional
  7. 战神引擎mud2没有mysql文件_战神引擎架设时新手报错集锦及修复方法
  8. 【JAVA】输入身高体重,输出BMI值
  9. 【高效日程管理】基于iOS快捷指令自动化,这是一个记录长期目标、统计专注时长、记录健康数据(需要智能手环、手表)、并生成每日报告与自我总结的高效日程管理方式
  10. HP LaserJet Pro CP1025指示灯亮/闪烁/如何处理?