基于Javaweb实现ATM机系统开发实战(十四)交易记录分页实现

还是老规矩,先看前端页面查看需要传递哪些参数,并且把逻辑有问题的部分进行修改~

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%> 




    
    IMUT_BANK ATM WelCome!!
    
    
    
    
    

    
    
    

    
    
    
    
    




    
    
 

IMUT BANK借记卡明细对账单

<% SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 request.setAttribute("date_time", df.format(new Date())); %>

打印日期:${date_time }



       卡      号               日      期               货      币               交  易  金  额               账  户  余  额       
${user.icno } ${user.rm_date } ${user.rm_currency } ${user.rm_balance } ${user.rm_rest }
<%-- ${requestScope.pageBean.pageNum == 1} --%> <%-- ${pageContext.request.contextPath}/serchDetaile?pageNum=1 --%>



<%-- 构建分页导航 --%>

共有${pageBean.totalRecord}条数据,共${pageBean.totalPage}页,当前为${pageBean.pageNum}页


首页 <%--如果当前页为第一页时,就没有上一页这个超链接显示 --%> ${i} ${i} 下一页 <%--如果当前页不是第一页也不是最后一页,则有上一页和下一页这个超链接显示 --%> 上一页 ${i} ${i} 下一页 <%-- 如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有 --%> 上一页 ${i} ${i} <%--尾页 --%> 尾页

创建一个PageBean对象,封装这些数据:

package com.atm.pojo;
import java.util.List;

public class PageBean {

    private int pageNum;//当前页页码,从请求传过来
    private int pageSize; //每页显示的数据条数
    private int totalRecord;//总的记录条数,查询数据库得到的数据

    //需要计算得来
    private  int totalPage; //总页数 通过总条数和每页显示多少条计算得来
    private int startIndex;//从哪开始拿

    //把每页要显示的数据放集合里
    private  List list;

    //分页显示的页数  1-5中的1和5

    private  int start;
    private int end;

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalRecord() {
        return totalRecord;
    }

    public void setTotalRecord(int totalRecord) {
        this.totalRecord = totalRecord;
    }

    public int getTotalPage() {
        return totalPage;
    }

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

    public int getStartIndex() {
        return startIndex;
    }

    public void setStartIndex(int startIndex) {
        this.startIndex = startIndex;
    }

    public List getList() {
        return list;
    }

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

    public int getStart() {
        return start;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public int getEnd() {
        return end;
    }

    public void setEnd(int end) {
        this.end = end;
    }

    public PageBean(int pageNum, int pageSize, int totalRecord){
        this.pageNum=pageNum;
        this.pageSize=pageSize;
        this.totalRecord=totalRecord;

        //totalpage 总页数
        if(totalRecord%pageSize==0){
            //说明整除,正好每页显示pagesize条数据
            this.totalPage=totalRecord/pageSize;
        }else{
            //不整除,就要多加一页,显示多余的数据
            this.totalPage=totalRecord/pageSize+1;
        }
        //开始索引
        this.startIndex=(pageNum-1)*pageSize;
        this.start=1;
        this.end=5;

        if(totalPage<=5){
            this.end=this.totalPage;
        }else{
            this.start=pageNum-2;
            this.end=pageNum+2;

            if(start<=0){
            //比如当前页是第一页,或者第二页,就不如和这个规则
                this.start=1;
                this.end=5;
            }
            if(end >=this.totalPage){
                //比如当前页是倒数第二页或者最后一页,也同样不符合上面这个规则
                this.end=totalPage;
                this.start=end-4;
            }
        }

    }

}

之前我们把查询交易明细的代码都写到Userservice中了,其实应该写到RunMessageService中,对应的数据层和实现类也是同样的操作~

然后对交易记录的Servlet进行修改,插入分页功能:

package com.atm.servlet;

import com.atm.pojo.PageBean;
import com.atm.pojo.RunMessage;
import com.atm.pojo.User;
import com.atm.service.RunMessageService;
import com.atm.service.UserService;
import com.atm.service.impl.RunMessageServiceImpl;
import com.atm.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;


//查询交易记录
@WebServlet("/serchDetaile")
public class SerchDetaileServlet extends HttpServlet {

    private RunMessageService runMessageService=new RunMessageServiceImpl();

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    User user =(User)request.getSession().getAttribute("ua");
        try {
            //分页处理
            //获得页码
            String pageNum=request.getParameter("pageNum");
            int page=1;
            if(pageNum!=null){
                page=Integer.parseInt(pageNum);
            }
            //每页显示的条数
            int pagesize=5;
            //计算分页的总条数
            int totalRecord= runMessageService.countRunmessage(user.getIcno());
            //封装pagebean对象
            PageBean pageBean=new PageBean<>(page,pagesize,totalRecord);
            //查询当前页的数据,并设置到pageBean中返回
            List lists =runMessageService.findRunMessageByPage(user.getIcno(),page,pagesize);
            pageBean.setList(lists);
            request.getSession().setAttribute("pageBean",pageBean);
            response.sendRedirect("/changepage/UserDetaile.jsp");
        } catch (Exception e) {
           e.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }
}

接口:

    //查询交易记录总条数
    public  int countRunmessage(String icno) throws Exception{
        return runMessageDao.countRunMessage(icno);
    }


    //查询当前页数据
    public List findRunMessageByPage(String icno,int page, int pagesize)   throws Exception{
        return runMessageDao.findRunMessageByPage(icno,page,pagesize);
    }

数据层:

//用户交易记录总条数
    public int countRunMessage(String icno)  throws Exception{
        Connection connection=DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("select count(1) from runmessage where icno=?");
        preparedStatement.setString(1,icno);
        ResultSet rs=  preparedStatement.executeQuery();
        int totalRecord=0;
        if (rs.next()){
            totalRecord=rs.getInt(1);
        }
        DBUtils.release(connection,preparedStatement,null);
        return totalRecord;
    }

    //查询当前页的交易记录
    public List findRunMessageByPage(String icno,int page, int pagesize) throws Exception {
        Connection connection=DBUtils.getConnection();
        int startIndex =(page-1)*pagesize;
        PreparedStatement preparedStatement = connection.prepareStatement("select * from runmessage where icno=? limit ?,?");
        preparedStatement.setString(1,icno);
        preparedStatement.setInt(2,startIndex);
        preparedStatement.setInt(3,pagesize);
        ResultSet rs=  preparedStatement.executeQuery();
        List lists=new ArrayList<>();
        while (rs.next()){
            RunMessage runMessage=new RunMessage();
            runMessage.setId(rs.getInt(1));
            runMessage.setIcno(rs.getString(2));
            runMessage.setRm_date(rs.getString(3));
            runMessage.setRm_currency(rs.getString(4));
            runMessage.setRm_balance(rs.getDouble(5));
            runMessage.setRm_rest(rs.getDouble(6));
            lists.add(runMessage);
        }
        DBUtils.release(connection,preparedStatement,null);
        return lists;
    }

再随便添加几条数据方便测试效果:

基于Javaweb实现ATM机系统开发实战(十四)交易记录分页实现_第1张图片

 重启一下系统,然后就发现功能实现啦!~

基于Javaweb实现ATM机系统开发实战(十四)交易记录分页实现_第2张图片

 实现代码已上传~

你可能感兴趣的:(JAVA学习笔记,java)