分页查询 ==? 同步:异步

总结一下最近学习项目中的一个模块-- 分页查询。即如何将数据库查到的结果显示到页面上? 后台代码又该如何操作?
同步查询流程图:
在这里插入图片描述准备工作: 创建一个 Page 对象用于参数传递。

package com.atguigu.atcrowdfunding.util;

import java.util.List;

public class Page {
	//当前页
	private Integer pageno;
	//当前页的数据
	private Integer pagesize;
	//总共多少页 totalsize/pagesize
	private Integer totalno;
	private Integer totalsize;
	private List datails;
	
	// altr+shift + s 快速打开工具
	
	public Page(Integer pageno,Integer pagesize)
	{
		if(pageno<=0)
		{
			this.pageno =1;
		}else {
		this.pageno = pageno;
		}
		if(pageno<=0)
		{
			this.pagesize =1;
		}else {		
		this.pagesize = pagesize;
		}
	}

	public Integer getPageno() {
		return pageno;
	}

	public void setPageno(Integer pageno) {
		this.pageno = pageno;
	}

	public Integer getPagesize() {
		return pagesize;
	}

	public void setPagesize(Integer pagesize) {
		this.pagesize = pagesize;
	}

	public Integer getTotalno() {
		return totalno;
	}

	private void setTotalno(Integer totalno) {
		this.totalno = totalno;
	}

	public Integer getTotalsize() {
		return totalsize;
	}

	public void setTotalsize(Integer totalsize) {
		this.totalsize = totalsize;
		this.totalno = (totalsize%pagesize)==0?(totalsize/pagesize):(totalsize/pagesize+1);
	}

	public List getDatails() {
		return datails;
	}

	public void setDatails(List datails) {
		this.datails = datails;
	}
	//开始索引是啥?
	public Integer startIndex()
	{
		return (pageno-1)*pagesize;
	}
	
	
	
	
	
	
	
	
	
	
	

}

在 html页面输入拦截地址:
在这里插入图片描述在表现层进行抵制拦截:

	@RequestMapping("/index")
		public String querySizes( Integer pageno , Integer pagesize, Map map) 
		{
			//利用UserService 代理对象进行查询
		    Page p = (Page) us.queryPage2(pageno,pagesize);
		    //将对象放入 request 域中
		    map.put("page", p);
		    //重定向
			return "/user/inidex";
		}

在 UserService 业务层接口实现代码:

	public Page queryPage2(@RequestParam(value="pageno",required=false,defaultValue="1")Integer pageno,
			@RequestParam(value="pageno",required=false,defaultValue="10")Integer pagesize) {
		
		Page p = new Page(pageno,pagesize);
		Integer index = p.startIndex();
		//查询总人数
		Integer count = userMapper.queryCount2();
		p.setPagesize(count);
		// 查询到的信息
		List<User>details = userMapper.queryListDetails(pageno,pagesize);
		p.setDatails(details);
		//返回查询到数据对象
		return p;
	}

数据库 UserMapper 代码(利用到了 mybatis 框架):

   <select id="queryCount2" resultType="int">
      select count(*) from t_user 
   </select>
  <select id="queryListDetails" resultMap="BaseResultMap">
      select * from t_user 
      <where>
         limit #{pageno},#{pagesize} 
      </where>
   </select>

数据被查到了,并且也放入了 request 域中,那渲染页面的时候咋让数据显示出来呢?
在这里插入图片描述

因为在表现层把 page(p)对象放入了 request域中。

<ul class="pagination">
						    <c:if test="${page.pageno==1}">
						       	<li class="disabled"><a href="#">上一页</a></li>
						    </c:if>
						    <c:if test="${page.pageno!=1}">
						        <li><a href="#" onclick="pageChange(${page.pageno-1})">上一页</a></li>
						    </c:if>
							<!-- 
								<li class="active"><a href="#">1 <span class="sr-only">(current)</span></a></li>
								<li><a href="#">2</a></li>
								<li><a href="#">3</a></li>
								<li><a href="#">4</a></li>
								<li><a href="#">5</a></li> -->
								<!-- 如果是 100 页咋办呢? -->
							<c:forEach begin="1" end="${page.tatalno}" var="num" >
							  <li  
							     <c:if test="${page.pageno==num}">
							        class="active"
							     </c:if>
							  >
							  <a href="#" onclick="pageChange($num)">${num}</a></li>
							</c:forEach>
								
						    <c:if test="${page.pageno==page.totalno}">
						       	<li class="disabled"><a href="#">下一页</a></li>
						    </c:if>
						    <c:if test="${page.pageno!=page.totalno}">
						        <li><a href="#" onclick="pageChange(${page.pageno+1})">下一页</a></li>
						    </c:if>
							 </ul>

上一页,下一页按钮所触发的函数:
在这里插入图片描述
最终结果:
在这里插入图片描述同步请求的效率太低了,用户体验不好,你查询一个数据等半天,你受得了?
接下来 异步请求 闪亮登场。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值