分页查询与条件查询

目录

1 分页查询

1.1 分页核心

1.2 分页的实现步骤

1)编写分页对象和实体对象

2)编写DAO层代码(查询总记录数和查询当前页数据)

3)编写Service层代码(封装PageBean对象)

4)编写Servlet代码(接收用户输入)

5)编写jsp页面代码(显示分页效果)

2 条件查询

2.1 条件查询的核心


1 分页查询

1.1 分页核心

        设计一个用于封装当前页所有分页相关的数据的对象,叫分页对象PageBean

/**

 * 分页对象。用于封装当前页的分页相关的所有数据

*/

public class PageBean {

   private List<Employee> data;//当前页的数据

   private Integer firstPage;//首页

   private Integer prePage;//上一页

   private Integer nextPage;//下一页

   private Integer totalPage;//末页、总页数

   private Integer currentPage;//当前页

   private Integer totalCount;//总记录数

   private Integer pageSize;//每页显示的记录数

}

1.2 分页的实现步骤

1)编写分页对象和实体对象

/**

 * 分页对象。用于封装当前页的分页相关的所有数据

*/

public class PageBean {

   private List<Employee> data;//当前页的数据

   private Integer firstPage;//首页

   private Integer prePage;//上一页

   private Integer nextPage;//下一页

   private Integer totalPage;//末页、总页数

   private Integer currentPage;//当前页

   private Integer totalCount;//总记录数

   private Integer pageSize;//每页显示的记录数

   public List<Employee> getData() {

      return data;

   }

   public void setData(List<Employee> data) {

      this.data = data;

   }

   public Integer getFirstPage() {

      return 1;

   }

   public void setFirstPage(Integer firstPage) {

      this.firstPage = firstPage;

   }

   /**

    * 计算上一页

    * @return

    */

   public Integer getPrePage() {

      return this.getCurrentPage()==this.getFirstPage() ? 1 : this.getCurrentPage()-1;

   }

   public void setPrePage(Integer prePage) {

      this.prePage = prePage;

   }

   /**

    * 计算下一页

    * @return

    */

   public Integer getNextPage() {

      return this.getCurrentPage()==this.getTotalPage()?

             this.getTotalPage()

                : this.getCurrentPage()+1;

   }

   public void setNextPage(Integer nextPage) {

      this.nextPage = nextPage;

   }

   public Integer getTotalPage() {

      return this.getTotalCount()%this.getPageSize()==0 ?

             this.getTotalCount()/this.getPageSize()

                :this.getTotalCount()/this.getPageSize()+1;

   }

   public void setTotalPage(Integer totalPage) {

      this.totalPage = totalPage;

   }

   public Integer getCurrentPage() {

      return currentPage;

   }

   public void setCurrentPage(Integer currentPage) {

      this.currentPage = currentPage;

   }

   public Integer getTotalCount() {

      return totalCount;

   }

   public void setTotalCount(Integer totalCount) {

      this.totalCount = totalCount;

   }

   public Integer getPageSize() {

      return pageSize;

   }

   public void setPageSize(Integer pageSize) {

      this.pageSize = pageSize;

   }

}

/**

 * 员工对象

*/

public class Employee {

   private int id;

   private String name;

   private String gender;

   private int age;

   private String title;

   private String phone;

   private String email;

   public int getId() {

      return id;

   }

   public void setId(int id) {

      this.id = id;

   }

   public String getName() {

      return name;

   }

   public void setName(String name) {

      this.name = name;

   }

   public String getGender() {

      return gender;

   }

   public void setGender(String gender) {

      this.gender = gender;

   }

   public int getAge() {

      return age;

   }

   public void setAge(int age) {

      this.age = age;

   }

   public String getTitle() {

      return title;

   }

   public void setTitle(String title) {

      this.title = title;

   }

   public String getPhone() {

      return phone;

   }

   public void setPhone(String phone) {

      this.phone = phone;

   }

   public String getEmail() {

      return email;

   }

   public void setEmail(String email) {

      this.email = email;

   }

   public Employee(int id, String name, String gender, int age, String title,

          String phone, String email) {

      super();

      this.id = id;

      this.name = name;

      this.gender = gender;

      this.age = age;

      this.title = title;

      this.phone = phone;

      this.email = email;

   }

   public Employee() {

      super();

      // TODO Auto-generated constructor stub

   }

   @Override

   public String toString() {

      return "Employee [age=" + age + ", email=" + email + ", gender="

             + gender + ", id=" + id + ", name=" + name + ", phone=" + phone

             + ", title=" + title + "]";

   }

}

2)编写DAO层代码(查询总记录数和查询当前页数据)

/**

 * 员工的DAO

*/

public class EmpDao {

   /**

    * 提供一个查询当前页员工的方法

    */

   public List<Employee> queryCurrentData(Integer currentPage,Integer pageSize){

      try {

          //1.创建QueryRunner对象

          QueryRunner qr = new QueryRunner(JdbcUtil.getDataSource());

          //2.执行查询sql操作

          //计算查询的起始行

          int startNo = (currentPage-1)*pageSize;

          List<Employee> list = (List<Employee>)qr.query("SELECT * FROM employee LIMIT ?,?",

                new BeanListHandler(Employee.class),

                new Object[]{startNo,pageSize});

          return list;

      } catch (SQLException e) {

          e.printStackTrace();

          throw new RuntimeException(e);

      }

   }

  

   /**

    * 提供查询总记录数的方法

    * @param args

    */

   public Integer queryTotalCount(){

      try {

          //1.创建QueryRunner

          QueryRunner qr = new QueryRunner(JdbcUtil.getDataSource());

          //2.执行sql查询

          Long count = (Long)qr.query("SELECT COUNT(*) FROM employee", new ScalarHandler(1));

          return count.intValue();

      } catch (SQLException e) {

          e.printStackTrace();

          throw new RuntimeException(e);

      }

   }

}

3)编写Service层代码(封装PageBean对象)

/**

 * 员工的业务类

*/

public class EmpService {

   /**

    * 提供用于封装PageBean对象方法(处理业务逻辑)

    */

   public PageBean queryPageBean(Integer currentPage,Integer pageSize){

      //封装PageBean分页对象数据

      PageBean pageBean = new PageBean();

     

      //设置当前页

      pageBean.setCurrentPage(currentPage);

     

      //设置每页显示的记录数

      pageBean.setPageSize(pageSize);

     

      EmpDao empDao = new EmpDao();

      /**

       * 从数据库中查询出总记录数

       */

      int totalCount = empDao.queryTotalCount();

      //设置总记录数

      pageBean.setTotalCount(totalCount);

     

      //设置当前页的数据

      /**

       * 从数据库中查询出当前页的员工数据

       */

      List<Employee> list = empDao.queryCurrentData(pageBean.getCurrentPage(), pageBean.getPageSize());

      pageBean.setData(list);

      return pageBean;

   }

}

4)编写Servlet代码(接收用户输入)

public class PageServlet extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)

          throws ServletException, IOException {

      /***********一、获取用户输入**************/

      //设置当前页(获取用户的输入)

      String currentPageStr = request.getParameter("currentPage");

          //如果用户没有输入,就是默认第1

      if(currentPageStr==null || currentPageStr.equals("")){

          currentPageStr = "1";

      }

     

      //设置每页显示的记录数(获取用户的输入)

      String pageSizeStr = request.getParameter("pageSize");

      if(pageSizeStr==null || pageSizeStr.equals("")){

          pageSizeStr = "5";

      }

     

      /***************二、调用业务方法,获取PageBean对象***********************/

      EmpService empService = new EmpService();

      PageBean pageBean = empService.queryPageBean(Integer.parseInt(currentPageStr), Integer.parseInt(pageSizeStr));

     

      /****************三、得到业务数据,跳转视图*********************/

      //PageBean数据发送到jsp页面中显示

      request.setAttribute("pageBean", pageBean);

      //转发

      request.getRequestDispatcher("/list.jsp").forward(request, response);

   }

}

5)编写jsp页面代码(显示分页效果)

<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>分页显示效果</title> 

  </head>

  <body>

    <table border="1" align="center" width="700px">

       <tr>

          <th>编号</th>

          <th>姓名</th>

          <th>性别</th>

          <th>年龄</th>

          <th>职位</th>

          <th>电话</th>

          <th>邮箱</th>

       </tr>

       <c:forEach items="${requestScope.pageBean.data}" var="emp">

       <tr>

          <td>${emp.id }</td>

          <td>${emp.name }</td>

          <td>${emp.gender }</td>

          <td>${emp.age}</td>

          <td>${emp.title }</td>

          <td>${emp.phone }</td>

          <td>${emp.email }</td>

       </tr>

       </c:forEach>

       <tr>

          <td colspan="7" align="center">

              <%--

                 1)如果当前页是首页,则不显示首页上一页的连接

                 2)如果当前页是末页,则不显示末页下一页的连接

               --%>

               <c:choose>

                 <c:when test="${pageBean.currentPage==pageBean.firstPage}">

                     首页&nbsp;

                     上一页

                 </c:when>

                 <c:otherwise>

                     <a href="${pageContext.request.contextPath }/PageServlet?currentPage=${pageBean.firstPage }&pageSize=${pageBean.pageSize}">首页</a>&nbsp;

                    <a href="${pageContext.request.contextPath }/PageServlet?currentPage=${pageBean.prePage }&pageSize=${pageBean.pageSize}">上一页</a>&nbsp;

                 </c:otherwise>

               </c:choose>

              <c:choose>

                 <c:when test="${pageBean.currentPage==pageBean.totalPage}">

                    下一页&nbsp;

                    末页

                 </c:when>

                 <c:otherwise>

                       <a href="${pageContext.request.contextPath }/PageServlet?currentPage=${pageBean.nextPage}&pageSize=${pageBean.pageSize}">下一页</a>&nbsp;

                       <a href="${pageContext.request.contextPath }/PageServlet?currentPage=${pageBean.totalPage }&pageSize=${pageBean.pageSize}">末页</a>&nbsp;

                 </c:otherwise>

              </c:choose>

              当前第${pageBean.currentPage }/${pageBean.totalPage }页,

              &nbsp;${pageBean.totalCount }&nbsp;每页显示 <input type="text" name="pageSize" id="pageSize" size="2" value="${pageBean.pageSize }" onblur="changePageSize()"/>

          </td>

       </tr>

    </table>

    <script type="text/javascript">

       //改变每页显示记录数的方法

       function changePageSize(){

          //获取用户输入的记录数

          var pageSize = document.getElementById("pageSize").value;

          //判断是否输入的数值

          var reg = /^[1-9][0-9]?$/;

          if(!reg.test(pageSize)){

              alert("请输入数组类型!");

              return;

          }

          //把记录数发送到后台

          var url = "${pageContext.request.contextPath}/PageServlet?pageSize="+pageSize;

          window.location.href=url;

       }

    </script>

  </body>

</html>

2 条件查询

2.1 条件查询的核心

        根据用户的查询条件组装sql语句:

            //2.组装sql

          StringBuffer sql = new StringBuffer("select * from department where 1=1 ");

          if(query!=null){

             //部门名称不为空时

             if(query.getDeptName()!=null && !query.getDeptName().equals("")){

                sql.append(" and deptName like '%"+query.getDeptName()+"%'");

             }

             //部门负责人不为空时

             if(query.getPrincipal()!=null && !query.getPrincipal().equals("")){

                sql.append(" and principal like '%"+query.getPrincipal()+"%'");

             }

             //部门职能不为空时

             if(query.getFunctional()!=null && !query.getFunctional().equals("")){

                sql.append(" and functional like '%"+query.getFunctional()+"%'");

             }

          }

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棉花糖老丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值