Skip to content

Commit

Permalink
分页功能实现
Browse files Browse the repository at this point in the history
  • Loading branch information
QLBF11 authored and QLBF11 committed Nov 30, 2020
1 parent 038c487 commit 1c04c0f
Show file tree
Hide file tree
Showing 11 changed files with 268 additions and 16 deletions.
16 changes: 16 additions & 0 deletions UserqueryInfo/src/cn/itcast/dao/UserDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,20 @@ public interface UserDao {
//修改一行时,提交时用
void update(User user);

/**
* 查询总记录数,分页时用
* @return
* @param
*/
int findTotalCount();


/**
* 分页查询每页记录的list数据
* @param start
* @param rows
* @param
* @return
*/
List<User> findByPage(int start, int rows);
}
14 changes: 14 additions & 0 deletions UserqueryInfo/src/cn/itcast/dao/impl/UserDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,18 @@ public void update(User user) {
String sql="update user set name=?,gender=?,age=?,address=?,qq=?,email=? where id=?";
template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());
}

@Override
public int findTotalCount() {
//查询数据库总的记录条数,分页时要用
String sql="select count(*) from user";
return template.queryForObject(sql,Integer.class);
}

@Override
public List<User> findByPage(int start, int rows) {
//分页查询时,返回list集合到页面展示
String sql="select * from user limit ?,?";
return template.query(sql,new BeanPropertyRowMapper<User>(User.class),start,rows);
}
}
71 changes: 71 additions & 0 deletions UserqueryInfo/src/cn/itcast/domain/PageBean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package cn.itcast.domain;

/**
* @author QLBF
* @version 1.0
* @date 2020/11/30 10:49
*/

import java.util.List;

/**
* 分页对象,分页查询要用的,加了泛型T更加通用,其他表也可以用的
*/
public class PageBean<T> {
private int totalCount; //总记录数
private int totalPage; //总页码
private List<T> list; //每页展示的数据
private int currentPage; //当前页码
private int rows; //每页展示的记录数

@Override
public String toString() {
return "PageBean{" +
"totalCount=" + totalCount +
", totalPage=" + totalPage +
", list=" + list +
", currentPage=" + currentPage +
", rows=" + rows +
'}';
}

public int getTotalCount() {
return totalCount;
}

public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public List<T> getList() {
return list;
}

public void setList(List<T> list) {
this.list = list;
}

public int getCurrentPage() {
return currentPage;
}

public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

public int getRows() {
return rows;
}

public void setRows(int rows) {
this.rows = rows;
}
}
10 changes: 10 additions & 0 deletions UserqueryInfo/src/cn/itcast/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* @date 2020/11/28 10:14
*/

import cn.itcast.domain.PageBean;
import cn.itcast.domain.User;

import java.util.List;
Expand Down Expand Up @@ -48,4 +49,13 @@ public interface UserService {

//删除选中
void delSelectedUser(String[] ids);

/**
* 分页条件查询
* @param currentPage
* @param rows
* @param
* @return
*/
PageBean<User> findUserByPage(String currentPage, String rows);
}
46 changes: 46 additions & 0 deletions UserqueryInfo/src/cn/itcast/service/impl/UserServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.domain.PageBean;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;

Expand Down Expand Up @@ -85,6 +86,51 @@ public void delSelectedUser(String[] ids) {
}
}



@Override
public PageBean<User> findUserByPage(String _currentPage, String _rows) {
//分页查询,在这里封装PageBean对象
//把string转为int
int currentPage=Integer.parseInt(_currentPage);
int rows=Integer.parseInt(_rows);

//为第一页点上一页出现异常做准备
if (currentPage<=0){
currentPage=1;
}


//1.创建空的PageBean对象
PageBean<User> pb=new PageBean<User>();
//2.设置参数
pb.setCurrentPage(currentPage);
pb.setRows(rows);

//3.调用dao查询总记录数
int totalCount=dao.findTotalCount();
pb.setTotalCount(totalCount);

//4.调用dao查询的List集合
//计算开始的记录索引
int start=(currentPage-1)*rows;
List<User> list=dao.findByPage(start,rows);
pb.setList(list);


//5.计算总页码
int totalPage=(totalCount % rows)==0?totalCount/rows:(totalCount/rows)+1;
pb.setTotalPage(totalPage);

//为最后一页点下一页出现异常做准备
// if (currentPage>=pb.getTotalPage()+1){
// currentPage=pb.getTotalPage();
// }

return pb;

}

/*public static void main(String[] args) {
User u=new User();
u.setUsername("zhangsan1");
Expand Down
4 changes: 3 additions & 1 deletion UserqueryInfo/src/cn/itcast/servlet/AddUserServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
service.addUser(user);//保存成功就x,不用返回

//5.跳转到userListServlet
response.sendRedirect(request.getContextPath()+"/userListServlet");
// response.sendRedirect(request.getContextPath()+"/userListServlet");
response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");


}

Expand Down
4 changes: 3 additions & 1 deletion UserqueryInfo/src/cn/itcast/servlet/DelSelectedServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
service.delSelectedUser(ids);

//3.跳转查询所有Servlet,重定向或者转发都行
response.sendRedirect(request.getContextPath()+"/userListServlet");
//response.sendRedirect(request.getContextPath()+"/userListServlet");
response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Expand Down
6 changes: 4 additions & 2 deletions UserqueryInfo/src/cn/itcast/servlet/DelUserServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
service.deleteUser(id);

//3.跳转到查询所有Servlet,重定向
response.sendRedirect(request.getContextPath()+"/userListServlet");
//response.sendRedirect(request.getContextPath()+"/userListServlet");
response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");


//这里因为没设置上面键值,所以用转发也行的
//request.getRequestDispatcher(request.getContextPath()+"/userListServlet").forward(request,response);
//request.getRequestDispatcher(request.getContextPath()+"/findUserByPageServlet").forward(request,response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Expand Down
58 changes: 58 additions & 0 deletions UserqueryInfo/src/cn/itcast/servlet/FindUserByPageServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package cn.itcast.servlet;

import cn.itcast.domain.PageBean;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;
import cn.itcast.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @author QLBF
* @version 1.0
* @date 2020/11/30 12:08
*/
@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//1.获取参数,从list.jsp获取的
String currentPage=request.getParameter("currentPage");
String rows=request.getParameter("rows");

//防止刚进来首页时没值
if (currentPage==null ||"".equals(currentPage)){
currentPage="1";
}
if (rows==null || "".equals(rows)){
rows="5";
}
//2.调用service查询
UserService service=new UserServiceImpl();
PageBean<User> pb=service.findUserByPage(currentPage,rows);

//为最后一页点下一页出现异常做准备
if (Integer.parseInt(currentPage)>=pb.getTotalPage()+1){
currentPage= String.valueOf(pb.getTotalPage());
}

//System.out.println(pb);
//3.将PageBean存入request
request.setAttribute("pb",pb);

//4.转发到list.jsp
request.getRequestDispatcher("/list.jsp").forward(request,response);



}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
4 changes: 3 additions & 1 deletion UserqueryInfo/src/cn/itcast/servlet/UpdateUserServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
service.updateUser(user);

//5.跳转到查询所有Servlet,重定向,userListServlet显示列表的
response.sendRedirect(request.getContextPath()+"/userListServlet");
// response.sendRedirect(request.getContextPath()+"/userListServlet");
response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Expand Down
51 changes: 40 additions & 11 deletions UserqueryInfo/web/list.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@
</tr>

<%--通过el表达式来获取servlet传给它的集合--%>
<c:forEach items="${users}" var="user" varStatus="s">
<c:forEach items="${pb.list}" var="user" varStatus="s">
<tr>
<th><input type="checkbox" name="uid" value="${user.id}"></th>
<td>${s.count}</td>
Expand All @@ -151,23 +151,52 @@
<div>
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<%--在第一页再点击上一页设置禁用状态,但还是可以点击会报错(在后台UserServiceImpl代码写控制<0就返回1就行)--%>
<c:if test="${pb.currentPage ==1}">
<li class="disabled">
</c:if>

<c:if test="${pb.currentPage !=1}">
<li>
</c:if>

<%--返回上一页(点击后,当前页码-1就行),这里</li>和上面c:if其中一个匹配--%>
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage-1}&rows=5" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li>
<a href="#" aria-label="Next">

<%--中间的数字,currentPage=${i}&rows=5(当前页码写死了)就这样发送给findUserByPageServlet获取的--%>
<c:forEach begin="1" end="${pb.totalPage}" var="i" step="1">
<%--用c:if来搬bootstrap来弄个激活状态--%>
<c:if test="${pb.currentPage==i}">
<li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5">${i}</a></li>
</c:if>

<c:if test="${pb.currentPage!=i}">
<li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5">${i}</a></li>
</c:if>
</c:forEach>


<%--在最后页再点击下一页设置禁用状态,但还是可以点击会报错(在后台UserServiceImpl代码写控制)--%>
<c:if test="${pb.currentPage ==pb.totalPage}">
<li class="disabled">
</c:if>

<c:if test="${pb.currentPage !=pb.totalPage}">
<li>
</c:if>

<%--下一页,和上一页差不多的配置--%>
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage+1}&rows=5" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>


<span style="font-size: 25px;margin-left: 5px">
共16条记录,共4页
${pb.totalCount}条记录,共${pb.totalPage}
</span>
</ul>
</nav>
Expand Down

0 comments on commit 1c04c0f

Please sign in to comment.