JavaWeb 分页查询

由于html不能直接从域当中直接拿数据 所以我们引入了jsp文件

数据存在了requets域当中

如果数据量很大,不可能把所有数据全部在页面展示:

数据全部在页面展示缺点:

  • SQL执行时间过长

  • 用户查看数据,滚动滚动条,用户体验不高

在实际开发中,分页查询, 实现:

sql语句: mysql分页实现: limit x,y x:开始序号(o开始)y:限制条数

前端:有页码  传递的请求参数有页码,当前页码, 上一页 下一页

一页最多展示的行数 -> 页容量(可以固定,也可以让用户进行选择)

java后台:Servlet接受请求 处理请求 响应结果  service去数据库中进行查询

后台提供的响应结果:

  • list行数据  list<对象> 行数据 select from 表明 limit x,y (x开始序号=(当前页码-1)*页容量y:页容量)
  • 页码  pageIndex
  • 总页数(用来判断是否可以进行/到下一页面)总页数不是由前端决定 -> 由后台数据决定 ->对应的是看由多少条记录,比如我现在数据库表中只有10条记录,因为我每一页只显示5条,5就是页容量 ->总页数就是10/5    但是多了1条呢? 11/5 = 5 最好一条数据不能显示  -> 需要对其进行取余    11 / 5 = 0 ? 
  • 总记录数
  • 页容量
  • 所以我们需要求出总页数:总记录数%页容量==0?总记录数/页容量:总记录数/页容量+1   总记录数:select count(1) from 表名  而页容量是由前端传递
  • 封装的思维:把响应给前端的5个数据封装到一个类中:分页实体类(Page)
<nav aria-label="Page navigation example">
  <ul class="pagination">
    <li class="page-item">
      <a class="page-link" href="#" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <li class="page-item"><a class="page-link" href="#">1</a></li>
    <li class="page-item"><a class="page-link" href="#">2</a></li>
    <li class="page-item"><a class="page-link" href="#">3</a></li>
    <li class="page-item">
      <a class="page-link" href="#" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

跨列 8列

有个问题:怎么知道有没有下一页?

next不能点的问题,

web层写servlet

超链接链接到servlet里面去查数据  那么就是一个get请求

1.编码处理 2.获取请求参数 得到页码 3.调用业务层内的方法 4.根据4的结果响应不同的结果(跳转页面)

null && “”  -> null && isEmpty()->双引号替代

但是向service层传的数据是int类型的,此时的pageIndex是String类型

进行数据类型转换 int pageIndex = 1;

传递页码

传递页容量

调方法

问题:

调用业务层方法结束 但是最终数据要给到页面

怎么给呢? list.html -> list.jsp 数据放到request域中

开始实现页面的跳转

request域有数据  -> 只能请求转发

servlet结束

写:useservice里的方法  page实体类 list.jsp

写实体类:如果项目当中多出需要使用分页  这个User就不就写死了吗?

使用泛型

当我们的项目当中很多地方都需要用到分页的时候,我们就需要用到泛型T

private List<T> records = new ArrayList<>();

private int pageIndex;

private int pageSize;

private int TotalPage

总页数不能时我们设置好的 应该是由我们计算好的

那么setTotalPages(int TotalPages)方法不能这么写

getTotalPages(){
return @
}

写一下User实例

一个Dao的方法一般只执行一条sql语句

而者两个合成一个service

Page.setPageIndex

创dao接口

创实现类

service写完

等到dao一写完 后台就写完了

有点不懂!!!!

或者再改改:

分页查询之JSP

JSP
JSP (Java Server Pages)是JavaWeb服务器端的动态资源。它与html页面的作用是相同的,显示数据和获取数据。
html转换为jsp
jsp: html + java脚本,使用html展示数据,又可以编写java代码,获取数据

html转换为jsp

jsp:html+jaav脚本 既可以有html展示数据的本事 又可以编写java代码来获取数据 

jstl标签

jsp本身是一个servlet  

编写java逻辑代码 方法体内写的是java代码

<%

        写的代码 都是放在service()方法  -> 联想到servlet里面的service方法

%>

把表达式结果显示在页面
<%=表达式%>

等同于servlet的reponse.getWriter( ).print(表达式)

定义属性,方法作为Servlet的属性和方法,一般很少在servlet定义属性,方法,很少使用

<%

        private int a;

        public int a(){}

%>

生成一个list.jsp

page指令  也是一个标签  是对于jsp页面的设置 声明写的是java脚本

jsp是一个类,你写一个java脚本在里面  也可以导包(比如你在脚本里面用到List

集合)list.html -> list.jsp那么这个转换就很简单了

使用java脚本呢获取域当中的数据

留一个:

步骤:

从域中获取数据 request.getAttribute("page") -> 返回的是Object  需要转换

page在jsp里面是一个特殊的关键字

拿到数据之后开始循环遍历

遍历List集合拿到的是一个User对象

站在用户角度上:用户就是看到首页和点击跳转后的页面,但是

从后方人员来看  -> 用户带年纪查询  -> 发起请求到ListServlet  ListServlet调用service,service调用dao里面的方法->dao1操作数据库 -> 最后ListServlet请求转发到list.jsp,这才是后方人员干的事  没有ListServlet就没有数据,这是我们需要了解的web流程

改一改下面的功能

从users得到总页数

如果i是当前页码  加上一个active选择器

if(i == userPage.getPageindex())

注意当前页不可以再点击发起请求了->超链接设置一下跳转

作业:请你完成上一页和下一页

如果是第一页不能点 同理下一页  如果不是最后一页和第一页那么都可以点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb 分页查询一般涉及到以下几个步骤: 1. 获取查询总记录数。可以通过 SQL 语句查询数据库中满足条件的总记录数。 2. 计算总页数。根据每页显示的记录数和总记录数,计算出总页数。 3. 获取当前页记录。通过 SQL 语句查询当前页的数据记录。 4. 将查询结果封装成分页对象并返回。可以使用一个 JavaBean 将查询结果封装成分页对象并返回,该对象包含当前页码、总页数、总记录数、当前页记录等信息。 下面是一个简单的实现示例: ```java public class PageBean<T> { private int currentPage; // 当前页码 private int totalPage; // 总页数 private int pageSize; // 每页显示的记录数 private int totalCount; // 总记录数 private List<T> list; // 当前页记录列表 // 省略 get/set 方法 public PageBean(int currentPage, int pageSize) { this.currentPage = currentPage; this.pageSize = pageSize; // 计算总记录数和总页数 int[] arr = getStartAndEnd(currentPage, pageSize); int start = arr[0]; int end = arr[1]; String sqlCount = "select count(*) from table_name"; String sqlData = "select * from table_name limit " + start + "," + pageSize; // 查询总记录数 ResultSet rsCount = stmt.executeQuery(sqlCount); if (rsCount.next()) { totalCount = rsCount.getInt(1); } // 查询当前页记录列表 ResultSet rsData = stmt.executeQuery(sqlData); while (rsData.next()) { // 将查询结果封装成实体对象,再添加到 list 中 T entity = createEntity(rsData); list.add(entity); } // 计算总页数 totalPage = (totalCount + pageSize - 1) / pageSize; } private int[] getStartAndEnd(int currentPage, int pageSize) { int start = (currentPage - 1) * pageSize; int end = start + pageSize; return new int[] { start, end }; } } ``` 在使用时,可以通过传入当前页码和每页显示的记录数来初始化 PageBean 对象: ```java PageBean<User> pageBean = new PageBean<>(currentPage, pageSize); ``` 其中,createEntity() 方法需要根据具体的实体对象进行实现。另外,需要注意 SQL 语句中的表名和字段名需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值