详解Java web中MySQL分页显示原理

详解Java web中MySQL分页显示原理

一、MySQL分页语句

select * from 表名 limit 参数1 , 参数2
其中:
参数1是从哪一个开始查
参数2就是要查几条数据
如:select * from news limit 0,10
就是查询news表的全部数据中从0开始查10条数据为一页显示
当然依旧可以使用group关键词、where语句等等。
如:select * from 表名 ORDER BY 列名 DESC limit 0,10

二、Dao层实现分页查询

接口实现类:


```java
public List<question> selectAllPQ(int Page) throws Exception {
		String sql = "select * from question  ORDER BY qid DESC limit ?,10";
		// c.发送sql,执行(增删改、查)
		Object[] params = {Page};						
		List<question> allPE=new ArrayList<question>();
		rs=executeQuery(sql, params);
		// d.处理结果
		while(rs.next()) { 
			question PE=new question();
			PE.setQid(rs.getInt(1));
			PE.setQtitle(rs.getString(2));
			PE.setQtime(rs.getString(3));				
			PE.setQpeople(rs.getString(4));
			allPE.add(PE);								
		}	
		closeResource();
		return allPE;
	}

在该方法(selectAllPQ(int Page))的传入参数Page需要制定从第几条开始查,如果乘以每页的数量就是可以直接传入页数。
例如,传入0,则从第0条开始查10条数据(mysql分页是从0开始,相当于数组),传入10就是从10 开始查询下10条数据放在第二页
如果将SQL语句改成
select * from question ORDER BY qid DESC limit ?*10,10
则传入“0”,则显示第一页的10条内容,传入1则显示第二页的10条内容
当然也可以将输入参数直接乘以页数,例如

public static void main(String[] args) {
    
    
    	 newsLook nl=new newsLook();
    	 int page=0;
    	 System.out.println(nl.selectNewsByPage(page*5));//指定页数
	}

三、UI层分页显示与按钮的使用

UI层进行分页显示主要思路为
Dao层将表中总条数和第一页的数据查询并返回给UI层
总条数作用
根据约定好的每页多少条,进而确定页数,迭代出选择页数的按钮
UI层点击页数按钮选择显示哪一页
在这里插入图片描述每个页数按钮上设置一个JavaScript的点击事件

  <%   
   if(pageCount>0) 
     for(int i=1;i<=pageCount;i++){
    
    
%>
     <button onclick="select(<%=i%>)"><%=i %></button>

<%     } %>

js的select(page)函数

function select(page){
    
    
	var page=page;
	//confirm(page);
	location.href="/newsManager/lookAll?selectPage="+page;
}

上一页和下一页按钮

使用上一页和下一页按钮时,最关键的是需要让程序知道现在处于第几页,这就要用到服务端要向前端返回一个当前在第几页的参数
request.setAttribute(“selePage”,selePage);
可以返回当前的页数并传给前端

前端接收的全部参数

<%

     List<myNew> myNews=(List<myNew>)request.getAttribute("mynews");
     int pageCount =(int)request.getAttribute("pageCount");
     int selePage=(int)request.getAttribute("selePage")+1;//知道自己在第几页了
     
%>

按钮设计js事件

<button onclick="upPage()">上一页</button>
<button onclick="downPage()">下一页</button>

js函数

function downPage(){
    
    
	//总页数
	var pageCount="<%=pageCount%>";
	//当前页数
	var nowPage="<%=selePage%>";
	if(pageCount==nowPage){
    
    
		confirm("翻到底了!");
	}else{
    
    
		location.href="/newsManager/lookAll?selectPage=<%=selePage+1%>";
	}

}

function upPage(){
    
    
	//总页数
	var pageCount="<%=pageCount%>";
	//当前页数
	var nowPage="<%=selePage%>";
	if(nowPage=="1"){
    
    
		confirm("翻到顶了!");
	}else{
    
    
		location.href="/newsManager/lookAll?selectPage=<%=selePage-1%>";
	}
	
	
}

请求的Servlet

newsLook nlAll=new newsLook();
		List<myNew> mynews=nlAll.seletAll();		
		int pageCount=mynews.size()/5+1;//总页数

		//接受页数
		String selectPage=request.getParameter("selectPage");
		int  selePage=0; //定义从第一页开始
		if(selectPage!=null && selectPage!="") {
    
    
			
			selePage=Integer.parseInt(selectPage)-1;
		}

		System.out.print("选择了第"+selectPage+"页");
		List<myNew> newsPage=nlAll.selectNewsByPage(selePage);//0是第一页,,传1 第二页
		
		if(!(mynews==null)) {
    
    
			request.setAttribute("selePage",selePage);
			request.setAttribute("mynews",newsPage);//一页里的所有数据
			request.setAttribute("pageCount",pageCount); //总页数
			request.getRequestDispatcher("/takeNews/lookNews.jsp").forward(request,response) ;	
			
		}else {
    
    
			request.getRequestDispatcher("/manager/false.jsp").forward(request,response) ;
		}

这样就可以实现mysql的分页操作。

当然这可能只是众多方法中的一种,还有很多的分页方法可以实现。欢迎大家互相分享!

猜你喜欢

转载自blog.csdn.net/Mr_YanMingXin/article/details/106412640