`

分页的封装与使用(1)

 
阅读更多

<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
1:分页要维护的信息很多,我们把这些相关的信息,分装到一个类中,PageView

import java.util.List;



/**
 * 封装分页的参数
 * 
 * 
 * 
 */
public class PageView<T> {
    private int currentPage = 1; // 当前页, 默认显示第一页
    private int pageCount = 4;   // 每页显示的行数(查询返回的行数), 默认每页显示4行
    private int totalCount;      // 总记录数
    private int totalPage;       // 总页数 = 总记录数 / 每页显示的行数  (+ 1)
    private List<T> pageData;       // 分页查询到的数据
    
    // 返回总页数
    public int getTotalPage() {
        if (totalCount % pageCount == 0) {
            totalPage = totalCount / pageCount;
        } else {
            totalPage = totalCount / pageCount + 1;
        }
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    
    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getPageCount() {
        return pageCount;
    }
    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }
    public int getTotalCount() {
        return totalCount;
    }
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
    
    public List<T> getPageData() {
        return pageData;
    }
    public void setPageData(List<T> pageData) {
        this.pageData = pageData;
    }
    
    

}

 2:在dao层

 

   <1>获取总查询记录数

  

	@Override
	public int getTotalCount() {
		// TODO Auto-generated method stub
		int count = 0;
		Connection conn = DBUtil.getConn();
		String sql = "select count(*) from forum";
		try{
			PreparedStatement ps= conn.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			while(rs.next()){
				count = rs.getInt(1);
				return count;
			}
			}catch(SQLException e){
				e.printStackTrace();
			}
		return count;
	}

    <2>分页查询数据,将查询到的数据设置到pageView对象中

//首先根据查询的起始行和查询的记录数封装成一个PageDate
@Override
	public List<Forum> getPageDate(int index,int pageCount) {
		// TODO Auto-generated method stub
		UserDao userDao = new UserDaoImpl();
		List<Forum> list = new ArrayList<Forum>();
		
		Connection conn = DBUtil.getConn();
		String sql="select * from forum  order by time desc limit ?,? ";
		try{
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setInt(1, index);
			ps.setInt(2, pageCount);
			ResultSet rs = ps.executeQuery();
			while(rs.next()){
				Forum forum = new Forum();
				forum.setId(rs.getInt("id"));
				forum.setChoose(rs.getString("choose"));
				forum.setTitle(rs.getString("title"));
				forum.setTime(rs.getDate("time"));
				forum.setContent(rs.getString("content"));
				forum.setPic(rs.getString("pic"));
//				forum.setUid(rs.getInt("uid"));
				forum.setView(rs.getInt("view"));
				forum.setUser(userDao.selectUserById(rs.getInt("uid")));
				list.add(forum);
			   }
			}catch(SQLException e){
				e.printStackTrace();
			}
			return list;
		
	}

   

调用上述方法,将pv整体作为参数传递进去
@Override
	public void getAll(PageView<Forum> pv) {
		int totalCount = this.getTotalCount();
        pv.setTotalCount(totalCount);
        if (pv.getCurrentPage() <=0) {
            pv.setCurrentPage(1);                        // 把当前页设置为1
           } else if (pv.getCurrentPage() > pv.getTotalPage()){
              pv.setCurrentPage(pv.getTotalPage());        // 把当前页设置为最大页数
        	      }
        int currentPage = pv.getCurrentPage();
        int index = (currentPage -1 ) * pv.getPageCount();
        int count = pv.getPageCount();
        List<Forum> pageData = forumDao.getPageDate(index, count);
        //分页查询,将查询到的数据设置到对象中
        pv.setPageData(pageData);
	}

 3:在servlet中调用查询,并把pageView作为参数传入。当查询结束后,pageBean的参数已经是查询后的记录,servlet再把查询后的结果,也就是封装在pageBean中的信息保存到域中发送到jsp页面

 

 

try {
            //1. 获取“当前页”参数;  (第一次访问当前页为null) 
            String currPage = request.getParameter("currentPage");
            // 判断
            if (currPage == null || "".equals(currPage.trim())){
                currPage = "1";      // 第一次访问,设置当前页为1;
            }
            // 转换
            int currentPage = Integer.parseInt(currPage);
            
            //2. 创建PageView对象,设置当前页参数; 传入service方法参数
            PageView<Forum> pageBean = new PageView<Forum>();
            pageBean.setCurrentPage(currentPage);
            
            //3. 调用service  
            forumService.getAll(pageBean);    // 【pageBean已经被dao填充了数据】
            
            //4. 保存pageBean对象,到request域中
           request.setAttribute("pageBean", pageBean);

 4:在jsp显示页面

 

   

//将取出的数据循环展示
 <c:forEach var="forum" items="${requestScope.pageBean.pageData}">
  <sapn>${forum.choose}<span>
  <span>${forum.title}</span>
</c:forEach>
<li>
   <a href="${pageContext.request.contextPath }/pageServlet?currentPage=1">首页</a>
</li>
<li>
  <a href="${pageContext.request.contextPath }/pageServlet?currentPage=${requestScope.pageBean.currentPage-1}">上一页</a>
</li>

<li>
  <a href="${pageContext.request.contextPath }/pageServlet?currentPage=${requestScope.pageBean.currentPage+1}">下一页</a>
</li>


							<li class="next">
								<a href="${pageContext.request.contextPath }/pageServlet?currentPage=${sessionScope.pageBean.totalPage}">末页</a>
							</li>

 

 

分享到:
评论

相关推荐

    js分页控件--js封装的分页控件

    自己写的一个js分页控件.已经封装,可以直接使用. 适合各种用途的分页控制. 如果界面不够美观,只需要修改css即可.

    php封装的page分页类.zip

    通过使用这样的分页类库,开发者可以避免重复编写分页代码,同时也能保证代码的统一性和可维护性。在实际项目中,只需实例化Page类,传入必要的参数,然后调用相应的函数,即可轻松实现分页效果。这对于大型Web应用...

    网站分页代码封装jar包

    使用这个封装好的分页功能,开发者可以按照以下步骤进行操作: 1. 创建`PageParam`对象,设置当前页数和每页大小。 2. 调用`PaginationHelper`的静态方法,传入原始的非分页SQL,`PageParam`对象,以及可能需要的...

    分页封装类

    分页封装类

    分页代码(已封装)

    描述中的"分页封装"进一步确认了这个内容的核心是关于如何有效地实现和组织分页代码。 分页的基本原理是将大量数据分成若干个较小的部分,每次只加载一部分到用户界面,而不是一次性加载所有数据。这样可以减少内存...

    MyFaces Oracle大数据表分页封装.docx

    在这个文档中,我们将探讨如何使用`MyFaces`结合`Oracle`进行大数据表的分页封装。 首先,我们来看`DataPage`类。这个类是用于存储和管理分页数据的核心,它包含了三个主要属性:`datasetSize`(数据集总大小),`...

    php实现数据分页封装

    4. **封装分页类** 将以上逻辑封装成一个类,可以方便地在项目中重复使用。创建一个名为`Page`的类,包含初始化、计算总页数、生成分页链接和获取当前页数据的方法。例如: ```php class Page { private $db; ...

    swing表格分页控件封装

    java swing表格分页控件封装,有利于在开发中节约时间

    Spring jdbctemplate + mysql 分页封装

    综上所述,Spring JdbcTemplate结合MySQL的分页查询封装涉及到的主要知识点有:Spring的JdbcTemplate用法、MySQL的分页查询(LIMIT和OFFSET)、结果集映射、分页结果对象的构建、以及代码封装与复用。通过这些技术,...

    HibernateUtil 分页 增删改查 封装

    HibernateUtil 分页 增删改查 封装 HibernateUtil 分页 增删改查 封装 HibernateUtil 分页 增删改查 封装

    封装一个.net的分页控件

    1. **参数处理**:控件需要接收并处理关于分页的参数,如当前页、每页显示条数、总记录数等。这些参数通常通过HTTP请求传递,例如作为查询字符串或POST数据。 2. **数据库交互**:在服务器端,控件需能根据上述参数...

    JAVA开发WEB分页封装办法实现

    本文将深入探讨如何在Java中实现Web分页封装,以便在实际项目中灵活应用。 首先,我们需要了解分页的基本概念。分页是将大量数据分割成较小、可管理的部分,每次只加载一部分到前端显示。这有助于减少网络传输的...

    封装的分页插件

    6. **接口设计**:为了方便其他开发者使用,封装的插件需要提供清晰、易用的API,允许用户设置分页参数、注册回调函数等。 7. **兼容性**:考虑到不同的浏览器环境,插件应确保在主流浏览器上都能正常工作,包括...

    Hibernate分页封装

    Hibernate分页封装 Hibernate是一个流行的Java持久化框架,提供了对数据库的访问和操作。然而,在实际开发中,分页...但是,我们需要注意,Hibernate分页封装需要与实际业务场景相结合,以便于实现最佳的性能和效率。

    js实现的异步分页封装

    总的来说,使用JavaScript实现异步分页封装,不仅可以提升用户体验,还能使代码结构清晰,易于维护。通过封装组件,可以方便地在多个地方复用这一功能,大大提高了开发效率。在实际项目中,结合前端框架如React、Vue...

    【Vue2 + ElementUI】分页el-pagination 封装成公用组件

    为了在多个页面上复用并统一分页样式,我们可以将其封装为一个公用组件。下面我们将详细探讨如何进行这个过程,以及涉及到的语言包配置。 首先,我们需要理解el-pagination的基本用法。在ElementUI中,el-...

    将Web层分页封装成通用模块

    以"28_传智播客巴巴运动网_将Web层分页封装成通用模块"为例,该示例可能演示了如何在Web应用中实现分页功能的通用封装。可能涉及到的技术栈包括但不限于Spring MVC、MyBatis等。开发者通过创建一个分页工具类,实现...

    封装好直接使用的jsp分页插件

    "封装好直接使用的jsp分页插件"正是一款针对这一需求设计的工具,它能够简化开发过程,使开发者能够快速实现分页功能,而无需关注底层复杂的逻辑。 该插件适用于jsp与servlet的原生组合,同时对流行的SSH(Struts2 ...

    超级封装的.tag标签分页、超级简化jsp内的分页代码、eclipse源码

    而`PageDemo`可能是一个示例文件,展示如何在JSP页面中使用封装好的分页.tag标签。 总的来说,这个资源提供了一种高效的分页实现方法,通过.tag标签将分页的复杂逻辑后置,让JSP页面更加清晰,提高了代码的可维护性...

    java分页类封装

    跟我上面的java底层简易封装配套的。有需要的也可以学习下。

Global site tag (gtag.js) - Google Analytics