• Java后端 学习路线 笔记汇总表【黑马程序员】
  1. JavaWeb-综合案例(用户信息)-学习笔记01【列表查询】
  2. JavaWeb-综合案例(用户信息)-学习笔记02【登录功能】
  3. JavaWeb-综合案例(用户信息)-学习笔记03【添加删除修改功能】
  4. JavaWeb-综合案例(用户信息)-学习笔记04【删除选中功能】
  5. JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】
  6. JavaWeb-综合案例(用户信息)-学习笔记06【复杂条件查询功能】

目录

第4节 分页查询功能

分页查询功能_分析

Bootstrap官网 分页禁用和激活状态

分页查询功能——分析图

分页查询功能_代码实现_具体分析

PageBean.java

分页查询功能——具体分析图

分页查询功能_代码实现_后台代码

FindUserByPageServlet.java

UserService.java

UserServiceImpl.java

UserDaoImpl.java

分页查询 实现效果

分页查询功能_代码实现_前台代码

list.jsp


第4节 分页查询功能

分页查询功能_分析

分页查询的好处:

  1. 减轻服务器内存的开销;
  2. 提升用户体验。

Bootstrap官网 分页禁用和激活状态

分页查询功能——分析图

分页查询功能

分页查询功能_代码实现_具体分析

PageBean.java

package cn.itcast.domain;import java.util.List;/*** 分页对象*/
public class PageBean<T> {private int totalCount; //总记录数private int totalPage; //总页码private List<T> list; //每页的数据private int currentPage; //当前页码private int rows; //每页显示的记录数public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}@Overridepublic String toString() {return "PageBean{" +"totalCount=" + totalCount +", totalPage=" + totalPage +", list=" + list +", currentPage=" + currentPage +", rows=" + rows +'}';}
}

分页查询功能——具体分析图

分页查询功能

分页查询功能_代码实现_后台代码

FindUserByPageServlet.java

package cn.itcast.web.servlet;import cn.itcast.domain.PageBean;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;
import cn.itcast.service.impl.UserServiceImpl;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 java.io.IOException;
import java.util.Map;@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");//1.获取参数String currentPage = request.getParameter("currentPage");//当前页码String rows = request.getParameter("rows");//每页显示条数if (currentPage == null || "".equals(currentPage)) {currentPage = "1";}if (rows == null || "".equals(rows)) {rows = "5";}//获取条件查询参数Map<String, String[]> condition = request.getParameterMap();//2.调用service查询UserService service = new UserServiceImpl();PageBean<User> pb = service.findUserByPage(currentPage, rows, condition);System.out.println(pb);//3.将PageBean存入requestrequest.setAttribute("pb", pb);request.setAttribute("condition", condition);//将查询条件存入request//4.转发到list.jsprequest.getRequestDispatcher("/list.jsp").forward(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}

UserService.java

UserServiceImpl.java

UserDaoImpl.java

package cn.itcast.dao.impl;import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;public class UserDaoImpl implements UserDao {private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic List<User> findAll() {//使用JDBC操作数据库...//1.定义sqlString sql = "select * from user";List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));return users;}@Overridepublic User findUserByUsernameAndPassword(String username, String password) {try {String sql = "select * from user where username = ? and password = ?";User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);return user;} catch (Exception e) {e.printStackTrace();return null;}}@Overridepublic void add(User user) {//1.定义sqlString sql = "insert into user values(null,?,?,?,?,?,?,null,null)";//2.执行sqltemplate.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());}@Overridepublic void delete(int id) {//1.定义sqlString sql = "delete from user where id = ?";//2.执行sqltemplate.update(sql, id);}@Overridepublic User findById(int id) {String sql = "select * from user where id = ?";return template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);}@Overridepublic void update(User user) {String sql = "update user set name = ?,gender = ? ,age = ? , address = ? , qq = ?, email = ? where id = ?";template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());}@Overridepublic int findTotalCount(Map<String, String[]> condition) {//1.定义模板初始化sqlString sql = "select count(*) from user where 1 = 1 ";StringBuilder sb = new StringBuilder(sql);//2.遍历mapSet<String> keySet = condition.keySet();//定义参数的集合List<Object> params = new ArrayList<Object>();for (String key : keySet) {//排除分页条件参数if ("currentPage".equals(key) || "rows".equals(key)) {continue;}//获取valueString value = condition.get(key)[0];//判断value是否有值if (value != null && !"".equals(value)) {//有值sb.append(" and " + key + " like ? ");params.add("%" + value + "%");//?条件的值}}System.out.println(sb.toString());System.out.println(params);return template.queryForObject(sb.toString(), Integer.class, params.toArray());}@Overridepublic List<User> findByPage(int start, int rows, Map<String, String[]> condition) {String sql = "select * from user  where 1 = 1 ";StringBuilder sb = new StringBuilder(sql);//2.遍历mapSet<String> keySet = condition.keySet();//定义参数的集合List<Object> params = new ArrayList<Object>();for (String key : keySet) {//排除分页条件参数if ("currentPage".equals(key) || "rows".equals(key)) {continue;}//获取valueString value = condition.get(key)[0];//判断value是否有值if (value != null && !"".equals(value)) {//有值sb.append(" and " + key + " like ? ");params.add("%" + value + "%");//?条件的值}}//添加分页查询sb.append(" limit ?,? ");//添加分页查询参数值params.add(start);params.add(rows);sql = sb.toString();System.out.println(sql);System.out.println(params);return template.query(sql, new BeanPropertyRowMapper<User>(User.class), params.toArray());}
}

分页查询 实现效果

分页查询功能_代码实现_前台代码

list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head><!-- 指定字符集 --><meta charset="utf-8"><!-- 使用Edge最新的浏览器的渲染方式 --><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。width: 默认宽度与设备的宽度相同initial-scale: 初始的缩放比,为1:1 --><meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --><title>用户信息管理系统</title><!-- 1. 导入CSS的全局样式 --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- 2. jQuery导入,建议使用1.9以上的版本 --><script src="js/jquery-2.1.0.min.js"></script><!-- 3. 导入bootstrap的js文件 --><script src="js/bootstrap.min.js"></script><style type="text/css">td, th {text-align: center;}</style><script>function deleteUser(id) {//用户安全提示if (confirm("您确定要删除吗?")) {//访问路径location.href = "${pageContext.request.contextPath}/delUserServlet?id=" + id;}}window.onload = function () {//给删除选中按钮添加单击事件document.getElementById("delSelected").onclick = function () {if (confirm("您确定要删除选中条目吗?")) {var flag = false;//判断是否有选中条目var cbs = document.getElementsByName("uid");for (var i = 0; i < cbs.length; i++) {if (cbs[i].checked) {//有一个条目选中了flag = true;break;}}if (flag) {//有条目被选中//表单提交document.getElementById("form").submit();}}}//1.获取第一个cbdocument.getElementById("firstCb").onclick = function () {//2.获取下边列表中所有的cbvar cbs = document.getElementsByName("uid");//3.遍历for (var i = 0; i < cbs.length; i++) {//4.设置这些cbs[i]的checked状态 = firstCb.checkedcbs[i].checked = this.checked;}}}</script>
</head>
<body>
<div class="container"><h3 style="text-align: center">用户信息列表</h3><div style="float: left;"><form class="form-inline" action="${pageContext.request.contextPath}/findUserByPageServlet" method="post"><div class="form-group"><label for="exampleInputName2">姓名</label><input type="text" name="name" value="${condition.name[0]}" class="form-control" id="exampleInputName2"></div><div class="form-group"><label for="exampleInputName3">籍贯</label><input type="text" name="address" value="${condition.address[0]}" class="form-control"id="exampleInputName3"></div><div class="form-group"><label for="exampleInputEmail2">邮箱</label><input type="text" name="email" value="${condition.email[0]}" class="form-control"id="exampleInputEmail2"></div><button type="submit" class="btn btn-default">查询</button></form></div><div style="float: right;margin: 5px;"><a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a><a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中</a></div><form id="form" action="${pageContext.request.contextPath}/delSelectedServlet" method="post"><table border="1" class="table table-bordered table-hover"><tr class="success"><th><input type="checkbox" id="firstCb"></th><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>籍贯</th><th>QQ</th><th>邮箱</th><th>操作</th></tr><c:forEach items="${pb.list}" var="user" varStatus="s"><tr><td><input type="checkbox" name="uid" value="${user.id}"></td><td>${s.count}</td><td>${user.name}</td><td>${user.gender}</td><td>${user.age}</td><td>${user.address}</td><td>${user.qq}</td><td>${user.email}</td><td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id});">删除</a></td></tr></c:forEach></table></form><div><nav aria-label="Page navigation"><ul class="pagination"><c:if test="${pb.currentPage == 1}"><li class="disabled"></c:if><c:if test="${pb.currentPage != 1}"><li></c:if><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage - 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}"aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><c:forEach begin="1" end="${pb.totalPage}" var="i"><c:if test="${pb.currentPage == i}"><li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li></c:if><c:if test="${pb.currentPage != i}"><li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li></c:if></c:forEach><li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage + 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}"aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><span style="font-size: 25px;margin-left: 5px;">共${pb.totalCount}条记录,共${pb.totalPage}页</span></ul></nav></div>
</div>
</body>
</html>

加油~

JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】相关推荐

  1. JavaWeb-综合案例(用户信息)-学习笔记02【登录功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  2. JavaWeb-综合案例(用户信息)-学习笔记06【复杂条件查询功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  3. JavaWeb-综合案例(用户信息)-学习笔记04【删除选中功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  4. JavaWeb-综合案例(用户信息)-学习笔记01【列表查询】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  5. Kotlin实战案例:实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表)

    n实战案例:带你实现RecyclerView分页查询功能(仿照主流电商APP,可切换列表和网格效果) 随着Kotlin的推广,一些国内公司的安卓项目开发,已经从Java完全切成Kotlin了.虽然Ko ...

  6. 【JVM 学习笔记 05】:JVM性能调优工具的使用和优化案例

    [JVM 学习笔记 05]:JVM性能调优工具的使用 1. 使用 jstat(命令行工具) 查看线上系统的JVM运行状况 1.1 常用命令 1.2 使用技巧 1.2.1 随着系统运行,每秒钟会在年轻代 ...

  7. JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  8. JavaWeb黑马旅游网-学习笔记02【注册功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  9. JavaScript学习笔记05【高级——DOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

最新文章

  1. 装完Windows 7后开启硬盘AHCI模式的方法
  2. 【Spring-Boot】【入门 01】第一个 Spring Boot 程序
  3. Laravel日志查看器 -- log-viewer扩展
  4. jQuery时间轴插件:jQuery Timelinr
  5. 【图像处理】MATLAB:彩色图像处理
  6. eclipse新建Android项目时提示AndroidManifest.xml file missing!
  7. Safari 快捷键
  8. linux -- open /acess/ftruncate/lstat 函数
  9. solr搭建(linux)
  10. KB:Office 365 MX验证出错OWA 打开后Http 404
  11. microsoft sql server无法删除_分享一则生产数据库sql优化案例:从无法删除到耗时20秒
  12. 服务器网站不用80端口,云服务器80端口不用备案
  13. 一篇实验结果统计检验入门文档
  14. 串口服务器采集需要通讯协议么,C2000-A2-SDX6000-CX1
  15. There is a problem with this Windows Installer package...的安装报错
  16. 发个谷歌,百度网盘,谷歌学术可用的网站
  17. rsync 命令_rsync命令教程示例
  18. 数据结构-----引论
  19. 通过ssh-keygen命令生成SSH密钥
  20. 必备技能21:正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

热门文章

  1. maven 打包时缺少文件_(三)Java资源文件和路径相关扫盲
  2. Thumbnailator-图片处理的Google开源Java类库
  3. della计算机驱动检测,nexus6安装BPTOOLS中的diag驱动图文教程
  4. 为了OFFER,菜鸟的我必须搞懂动态规划系列三个背包问题之多重背包(二进制优化方法)
  5. 十、 RDD编程和Spark SQL
  6. 二十六、爬取拉钩网Python职位的数据
  7. 化工原理各章知识点汇总
  8. Java100例题(一)
  9. sklearn数据的获取
  10. 直播预告 | AAAI 2022论文解读:基于锚框排序的目标检测知识蒸馏