超强大分页插件PageHelper详解,学习Java的每日分享Day.2

目录

普通分页

PageHelper分页

PageHelper分页的具体操作步骤:


普通分页

        在目前的很多项目中,都会涉及到查询结果的分页操作,分页的出现大大减轻了用户在使用时对数据的阅读量,最为重要的一点在于分页可以大大减轻服务器的查询操作,不用一次查询所有的记录,提高查询效率。

        而在上一个我学习开发的项目之中就出现了分页,当时我的写法非常的麻烦,代码如下(这是一个web的小项目,而且当时还没学怎么将java代码从jsp中消除):

<%@ page language="java" contentType="text/html; charset=UTF-8" 

    pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.sql.*,test22.Student,test22.Student1"%>




Insert title here



<%
		
       int totalRecord=0;
       int pageSize  =  6;
       int currentPage = -1;
       String curPage = request.getParameter("currentPage");
       if(curPage==null)
           currentPage=1;
      else
           currentPage=Integer.parseInt(curPage);
      
        int startRec = (currentPage-1)*pageSize;
		
       Connection conn = null;
   	   ResultSet rs = null;
   	   try{ 
      		 Class.forName("oracle.jdbc.OracleDriver"); 
   	   } catch(ClassNotFoundException e){
     		 out.print("加载驱动错误");
   	   } 
   	   conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123");


       
       
       String sql = "select count(*) from student";
       PreparedStatement ps =  conn.prepareStatement(sql);
       rs = ps.executeQuery();
       if(rs.next()){
    	   totalRecord = rs.getInt(1); 
       }
       int pageCount = (totalRecord%pageSize==0)?(totalRecord/pageSize):(totalRecord/pageSize+1);
      //调整待显示的页码 
       if(currentPage > pageCount) currentPage = pageCount; 
       
       ps = conn.prepareStatement("select * from (select s.*,rownum rn  from (select * from student order by sno) s  where rownum<=?*?) where rn>(?-1)*? ");
       ps.setInt(1, currentPage);
       ps.setInt(2,pageSize);
       ps.setInt(3, currentPage);
       ps.setInt(4,pageSize);
       rs = ps.executeQuery(); 
       List stuList = new ArrayList();
       while(rs.next()){
       		Student1 stu = new Student1();
       		stu.setSno(rs.getInt(1));
       		stu.setSname(rs.getString(2));
       		stu.setSsex(rs.getString(3));
       		stu.setSbirth(rs.getDate(4).toString());
       		stu.setShobby(rs.getString(5));
       		stu.setSgid(rs.getInt(6));
      	 	stuList.add(stu);
       } 
      

%>

	<%for(Student1 s : stuList){%>
		
		
	<%}%>
	
	

学生id 学生姓名 学生性别 学生生日 兴趣爱好 分组id
<%=s.getSno() %> <%=s.getSname() %> <%=s.getSsex() %> <%=s.getSbirth() %> <%=s.getShobby() %> <%=s.getSgid() %>
<%//循环显示数据%> 共<%=pageCount%>页 每页<%=pageSize%>条记录 页次 <%=currentPage%>/<%=pageCount%>页 首页 <%if(currentPage==1){%> 上一页 <%}else if(currentPage>1){%> 上一页 <%} %> 下一页 尾页 <% //关闭结果集 rs.close(); //关闭SQL语句对象 ps.close(); //关闭数据库 conn.close(); %>

代码写的现在看来很糙,但是思想就是,在使用Oracle数据库中和在使用MySQL数据库中,用不同的分页sql查询语句来操作,MySQL的语句相对简单,使用select * from table limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的数。而 Oracle就相对麻烦的多,上面的代码就是使用Oracle来进行一个分页操作,需要使用伪列的思想,代码非常的复杂。

PageHelper分页

        接下来我们使用分页工具PageHelper来处理分页就将大大减低我们开发的难度

PageHelper分页的具体操作步骤:

1.安装jar包或者在maven中导入依赖,个人推荐导入依赖


            com.github.pagehelper
            pagehelper
            ${pagehelper-version}
	

2.mybatis对PageHelper的配置


    	
        
        
        	   
            
              
              
              
              
              
              
              
              
              
              
              
              
              
              
  
              
              
              
              

        
        

上面列举的是一些特别常用的配置信息的设置

3.代码测试

	@Test
	public void test_selectAllStudent() throws IOException {
		PageHelper.startPage(1, 0,"sid");	
		//第五步、查询所有学生
		List ls = studentDao.selectAllStudent();
		for(Student student : ls) {
			System.out.println(student.toString());
		}
		
		
		
	}

在Junit4中调用PageHelper.startPage(1, 0,"sid");这个静态方法其中第一参数是指分页的当前页码,如果在配置文件中设置启用分页参数合理化时,第一个参数小于1或者大于分组总页数时,会分别显示第一页的数据和最后一页的数据;第二个参数代表的是一页有多少的数据量,如果设置 时,参数为0,会将所有的数据都显示;第三个参数代表数据库的数据字段名称还可以在后面加上desc来表示降序排列。

你可能感兴趣的:(小白学习java之路,mybatis,数据库)