您当前的位置: 首页 > 

liaowenxiong

暂无认证

  • 3浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

分页查询的实现(struts2+jsp+jstl+el)

liaowenxiong 发布时间:2022-02-11 21:40:38 ,浏览量:3

文章目录
  • MySQL的分页查询语句
  • 如何设置《上一页》和《下一页》的有效性呢?
  • 示例代码

MySQL的分页查询语句

使用 MySQL 的分页查询语句 select * from project limit 5,5,打开表 project,获取全部记录,只要第 5 条记录后的 5 条记录,不包含第 5 条记录在内,记录编号从 1 开始;如果记录编号从 0 开始,那么则从第 5 条记录起,要 5 条记录,包含第 5 条记录在内。

在 DAO 中将 select * from project limit ?,? 这条SQL语句框架准备好,在设置参数的时候,第1个参数设置为 (page-1)*rowsPerPage, 第 2 个参数设置为 rowsPerPagepage 就是你要查看第几页,rowsPerPage 就是每页显示多少行,如果你要查看第 5 页,每页显示 5 行,那么就应该扣除前面 4 页的 20 行,应该从 21 条开始查询 5 条记录,MySQL 是通过索引值来定位记录的位置,第 21 行记录的索引值为 20,而 (page-1)*rowsPerPage 这个表达式计算出来正好是 20,那么第 2 个参数则是 5,表示的含义就是从索引值为 20 的记录开始获取5条记录(含起始行),正好就是第 5 页要显示的数据了。

如何设置《上一页》和《下一页》的有效性呢?

查询的页数是第一页时,表示前面已经没有了,那么《上一页》按钮则不可以点击;查询的页数如果是最后一页时,表示后面已经没有了,那么《下一页》按钮则不可以点击。

这里使用 jstl 标签 结合 el 表达式来实现。

 
	
		上一页
	
	
		上一页
	

示例代码

DAO 的示例代码:

package priv.lwx.struts2.dao;

import priv.lwx.struts2.entity.Project;
import priv.lwx.struts2.util.ConnectionUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * description
 *
 * @author liaowenxiong
 * @date 2022/2/7 13:18
 */

public class ProjectDAO {
  private static final String findAll = "select id,name,start_date,end_date from t_project";
  private static final String findAll2 = "select id,name,start_date,end_date from t_project limit ?, ?";
  private static final String totalRows = "select count(*) from t_project";

  /**
   * 获取所有项目的集合
   * @return
   */
  public List findAll() {
    Connection conn;
    PreparedStatement pstmt;
    ResultSet rs;
    List list = new ArrayList();
    try {
      conn = ConnectionUtils.getConnection();
      pstmt = conn.prepareStatement(findAll);
      rs = pstmt.executeQuery();
      while (rs.next()) {
        Project project = new Project();
        project.setId(rs.getInt("id"));
        project.setName(rs.getString("name"));
        project.setStartDate(rs.getDate("start_date"));
        project.setEndDate(rs.getDate("end_date"));
        list.add(project);
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return list;
  }

  /**
   * 根据提供的页码和每页显示的行数获取工程集合
   *
   * @param page
   * @param rowsPerPage
   * @return 工程的集合
   */
  public List findAll(int page, int rowsPerPage) {
    Connection conn = ConnectionUtils.getConnection();
    PreparedStatement pstmt;
    ResultSet rs;
    List list = new ArrayList();
    try {
      pstmt = conn.prepareStatement(findAll2);
      pstmt.setInt(1, (page - 1) * rowsPerPage);
      pstmt.setInt(2, rowsPerPage);
      rs = pstmt.executeQuery();
      while (rs.next()) {
        Project project = new Project();
        project.setId(rs.getInt(1));
        project.setName(rs.getString(2));
        project.setStartDate(rs.getDate(3));
        project.setEndDate(rs.getDate(4));
        list.add(project);
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
    return list;
  }

  /**
   * 获取总的页数
   * @param rowsPerPage 传入每页显示的行数
   * @return 返回总的页数
   */
  public int getTotalPages(int rowsPerPage) {
    Connection conn;
    PreparedStatement pstmt;
    ResultSet rs;
    conn = ConnectionUtils.getConnection();
    try {
      pstmt = conn.prepareStatement(totalRows);
      rs = pstmt.executeQuery();
      rs.next();
      int totalRows = rs.getInt(1);
      if (totalRows % rowsPerPage == 0) {
        return totalRows / rowsPerPage;
      } else {
        return totalRows / rowsPerPage + 1;
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }


  }


}

Action 的示例代码:

package priv.lwx.struts2;

import priv.lwx.struts2.dao.ProjectDAO;
import priv.lwx.struts2.entity.Project;

import java.util.List;

/**
 * description
 *
 * @author liaowenxiong
 * @date 2022/2/7 15:19
 */

public class ProjectListAction {
  // input
  private int page = 1;
  private int rowsPerPage = 3;

  // output
  private List projects;
  private int totalPages;

  public int getTotalPages() {
    return totalPages;
  }

  public void setTotalPages(int totalPages) {
    this.totalPages = totalPages;
  }

  public String execute() {
    ProjectDAO pdao = new ProjectDAO();
    // projects = pdao.findAll();
    projects = pdao.findAll(page, rowsPerPage);
    totalPages = pdao.getTotalPages(rowsPerPage);
    return "success";
  }

  public List getProjects() {
    return projects;
  }

  public void setProjects(List projects) {
    this.projects = projects;
  }

  public int getPage() {
    return page;
  }

  public void setPage(int page) {
    this.page = page;
  }

  public int getRowsPerPage() {
    return rowsPerPage;
  }

  public void setRowsPerPage(int rowsPerPage) {
    this.rowsPerPage = rowsPerPage;
  }
}

jsp 示例代码:





    Title



    Project List


    
        
            上一页
        
        
            上一页
        
    
    |第${page}页|
    
        
            下一页
        
        
            下一页
        
    


    
        ID
        NAME
        Start Date
        End Date
    
    
        
            ${project.id}
            ${project.name}
            ${project.startDate}
            ${project.endDate}
        
    



以上的方式是通过 jstl 标签库和 el 表达式相结合来实现的,当然我们也可以通过 Java 代码来实现,就是在 jsp 中添加如下的 Java 代码片段:


关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0418s