zoukankan      html  css  js  c++  java
  • 简单分页查询(web基础学习笔记十三)

    一、建立资源文件和工具类

    1.1 、database.properties

    jdbc.driver_class=oracle.jdbc.driver.OracleDriver
    jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
    jdbc.connection.username=scott
    jdbc.connection.password=tiger

    1.2、建立包:com.pb.emp.untily

    ConfigManager类

    package com.pb.emp.untily;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    public class ConfigManager {
        private static ConfigManager configManager;
        private static Properties properties;
        
        private ConfigManager(){
            String configfile="database.properties";
            properties=new Properties();
            InputStream in=ConfigManager.class.getClassLoader().getResourceAsStream(configfile);
            try {
                properties.load(in);
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public static ConfigManager getInstance(){
            if(configManager==null){
                configManager=new ConfigManager();
            }
            return configManager;
            
        }
        public static String getString(String key){
            return properties.getProperty(key);
        }
        
    }

    1.3、建立员工实体类

    package com.pb.emp.entity;
    
    import java.util.Date;
    /**
     * 员工实体类
     * @author 森林森
     *
     */
    public class Emp {
        private int empno;                             
        private String ename;                       
        private String job;                        
        private int mgr;                      
        private Date hiredate;                     
        private double sal;                        
        private double comm;                
        private int deptno;
        
        //getter和setter方法 
        public int getEmpno() {
            return empno;
        }
        public void setEmpno(int empno) {
            this.empno = empno;
        }
        public String getEname() {
            return ename;
        }
        public void setEname(String ename) {
            this.ename = ename;
        }
        public String getJob() {
            return job;
        }
        public void setJob(String job) {
            this.job = job;
        }
        public int getMgr() {
            return mgr;
        }
        public void setMgr(int mgr) {
            this.mgr = mgr;
        }
        public Date getHiredate() {
            return hiredate;
        }
        public void setHiredate(Date hiredate) {
            this.hiredate = hiredate;
        }
        public double getSal() {
            return sal;
        }
        public void setSal(double sal) {
            this.sal = sal;
        }
        public double getComm() {
            return comm;
        }
        public void setComm(double comm) {
            this.comm = comm;
        }
        public int getDeptno() {
            return deptno;
        }
        public void setDeptno(int deptno) {
            this.deptno = deptno;
        }
        
        
        
        
    }

    二、建立BaseDao基类

    2.1、建立基类

    package com.pb.emp.dao;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.pb.emp.untily.ConfigManager;
    
    
    public class BaseDao {
        protected Connection conn;
        protected PreparedStatement ps;
        protected ResultSet rs;
        
        //建立连接
        public boolean getConnection(){
            String driver=ConfigManager.getInstance().getString("jdbc.driver_class");
            String url=ConfigManager.getInstance().getString("jdbc.connection.url");
            String username=ConfigManager.getInstance().getString("jdbc.connection.username");
            String password=ConfigManager.getInstance().getString("jdbc.connection.password");
            
            try {
                Class.forName(driver);
                conn=DriverManager.getConnection(url,username, password);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
            return true;
        }
       
        //增加,修改,删除
        public int executeUpdate(String sql, Object[] params){
            getConnection();
            int updateRow=0;
            try {
                ps=conn.prepareStatement(sql);
                //填充占位符
                for(int i=0;i<params.length;i++){
                    ps.setObject(i+1, params[i]);
                }
                updateRow = ps.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return updateRow;
        }
        //
        //查询
            public ResultSet executeSQL(String sql, Object[] params){
                getConnection();
                
                try {
                    ps=conn.prepareStatement(sql);
                    //填充占位符
                    for(int i=0;i<params.length;i++){
                        ps.setObject(i+1, params[i]);
                    }
                    rs = ps.executeQuery();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return rs;
            }
            
        // 关闭资源
            public boolean closeResource() {
                if(rs!=null){
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        return false;
                    }
                }
                if(ps!=null){
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        return false;
                    }
                }
                
                if(conn!=null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        return false;
                    }
                }
                return true;
            }
    }

    2.2、建立分页类

    package com.pb.emp.untily;
    
    public class Page {
        private int currPageNo=1;  //当前页号
        private int pageSize=0; //每页显示的记录数
        private int recordCount=0; //总记录数
        private int totalPageCount=1; //总页数
        
        
        public int getCurrPageNo() {
            //条中不能加this
            if(totalPageCount==0)
                return 0;
            return currPageNo;
        }
        public void setCurrPageNo(int currPageNo) {
            if(currPageNo>0)
            this.currPageNo = currPageNo;
        }
        
        public void setPageSize(int pageSize) {
            //条中不能加this
            if(pageSize>0)
            this.pageSize = pageSize;
        }
        public int getPageSize() {
            return pageSize;
        }
        
        public int getTotalPageCount() {
            return totalPageCount;
        }
        public void setTotalPageCount(int totalPageCount) {
            this.totalPageCount = totalPageCount;
        }
        public int getRecordCount() {
            return recordCount;
        }
        
        public void setRecordCount(int recordCount) {
            //条中不能加this
            if(recordCount>0)
            this.recordCount = recordCount;
            //调用总页数设置方法为totalPageCount赋值
            //this.settotalPageCountByRs();
        }
        
        //设置总页数
        public int settotalPageCountByRs(){
            if(this.recordCount%this.pageSize==0){
                this.totalPageCount=this.recordCount/this.pageSize;
            }else if(this.recordCount%this.pageSize>0){
                this.totalPageCount=this.recordCount/this.pageSize+1;
        }else{
            this.totalPageCount=0;
            }
            return this.totalPageCount;
        }
       //开始记录数
        public int getStartRow(){
            return (currPageNo-1) * pageSize+1;
        }
          //结束记录数
        public int  getEndRow(){
            return currPageNo * pageSize;
        }
        public static void main(String[] args) {
            Page p=new Page();
            p.setCurrPageNo(2);
            System.out.println(p.getCurrPageNo());
            p.setPageSize(3);
            System.out.println(p.getPageSize());
            int i=p.getStartRow();
            System.out.println("启始记录"+i);
            int j=p.getEndRow();
            System.out.println("结束记录"+j);
        }
    }

    三、建立分页查询的实现类

    3.1、实现类

    package com.pb.emp.dao.empl;
    
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import com.pb.emp.dao.BaseDao;
    import com.pb.emp.dao.EmpDao;
    import com.pb.emp.entity.Emp;
    import com.pb.emp.untily.Page;
    
    public class EmpDaoImpl extends BaseDao implements EmpDao {
       
        /**
         * 获取新闻总数量
         * */
        public int getTotalCount() {
            int totalCount=0;
            String sql="select count(*) from emp";
            Object[] params={};
             rs=this.executeSQL(sql, params);
            try {
                while(rs.next()){
                    totalCount=rs.getInt(1);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                this.closeResource();
            }
            return totalCount;
        }
        
        /**
         * 分页获取新闻信息
         * */
        public List<Emp> getEmpByPage(int pageNo, int pageSize) {
            // 建立集合存放查询结果
            List<Emp> emplist = new ArrayList<Emp>();
            String sql = "SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM(SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno,ROWNUM rn FROM emp) e WHERE e.rn BETWEEN ? AND ?";
            Page pages=new Page();
            //设置当前页和页显示显示记录数
            pages.setCurrPageNo(pageNo); //设置当前页码
            pages.setPageSize(pageSize); //每页显示记录数
            //计算开始和结束记录数
            int startRow = pages.getStartRow();
            int endRow = pages.getEndRow();
            //填充占位符?
            Object [] params={startRow,endRow};
            //调用类BaseDao的查询方法并接收结果
            rs=this.executeSQL(sql, params);
            try {
                
                while(rs.next()){
                     int empno=rs.getInt("empno");                             
                     String ename=rs.getString("ename");                       
                     String job=rs.getString("job");                        
                     int mgr=rs.getInt("mgr");                      
                     Date hiredate=rs.getDate("hiredate");                     
                     double sal=rs.getDouble("sal");                        
                     double comm=rs.getDouble("comm");                
                     int deptno=rs.getInt("deptno");
                     //声明Emp对象
                     Emp emp=new Emp();
                     //将得到的值添加到对象中
                     emp.setEmpno(empno);
                     emp.setEname(ename);
                     emp.setJob(job);
                     emp.setMgr(mgr);
                     emp.setHiredate(hiredate);
                     emp.setSal(sal);
                     emp.setComm(comm);
                     emp.setDeptno(deptno);
                     //将对象添加到集合
                     emplist.add(emp);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                this.closeResource();
            }
            return emplist;
    
        }
        public static void main(String[] args) {
            EmpDaoImpl  e=new EmpDaoImpl();
            System.out.println(e.getTotalCount());
            List<Emp> emplist=e.getEmpByPage(2, 3);
            System.out.println("=====员工信息====");
            for (Emp emp : emplist) {
                System.out.println(emp.getSal()+"	"+emp.getComm()+"	"+emp.getDeptno() );
            }
        }
    
    }

    3.2、分离出接口

    package com.pb.emp.dao;
    
    import java.util.List;
    
    import com.pb.emp.entity.Emp;
    
    public interface EmpDao {
        /**
         * 获取新闻总数量
         * */
        public int getTotalCount();
        
        public List<Emp> getEmpByPage(int pageNo, int pageSize);
    }

    3.3、分享出service接口和实现类

    package com.pb.service;
    
    import java.util.List;
    
    import com.pb.emp.entity.Emp;
    
    public interface Service {
    
        public List<Emp> getEmpByPage(int pageNo, int pageSize);
        
        public int getTotalCount();
    }
    package com.pb.service.impl;
    
    import java.util.List;
    
    import com.pb.emp.dao.EmpDao;
    import com.pb.emp.entity.Emp;
    import com.pb.service.Service;
    
    public class ServiceImpl implements Service {
          private EmpDao empDao;
          
       /**
        * 一定要加setter和getter方法,不然无法调用
        * @森林森
        */
        public EmpDao getEmpDao() {
            return empDao;
        }
    
        public void setEmpDao(EmpDao empDao) {
            this.empDao = empDao;
        }
    
        @Override
        public List<Emp> getEmpByPage(int pageNo, int pageSize) {
            
            return empDao.getEmpByPage(pageNo, pageSize);
        }
    
        @Override
        public int getTotalCount() {
            // TODO Auto-generated method stub
            return empDao.getTotalCount();
        }
    
    }

    四、建立页面

    4.1导入service类

    建立common.jsp页面

    <jsp:useBean id="empService" class="com.pb.service.impl.ServiceImpl" scope="page"></jsp:useBean>
    <jsp:useBean id="empDao" class="com.pb.emp.dao.empl.EmpDaoImpl" scope="page"></jsp:useBean>
    <jsp:setProperty property="empDao" name="empService" value="<%=empDao%>" />

    4.2 实现页面get方式

    <%@page import="com.pb.emp.untily.Page"%>
    <%@page import="com.pb.emp.entity.Emp"%>
    <%@page import="java.util.List"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@include file="../common/common.jsp" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
    function go(){
        var goid=document.getElementById("goid").value;
        var regexp=/^d+$/;
        if(!regexp.test(goid)){
            alert("请输入数字");
        }else{
            window.location="emp.jsp?pageIndex="+goid;
        }
    }
    </script>
    </head>
    <body>
    
    <table border="1" width="80%" align="center">
    
    <tr>
    <td>员工编号</td>
    <td>员工姓名</td>
    <td>职位</td>
    <td>入职日期</td>
    <td>工资</td>
    <td>奖金</td>
    <td>部门编号</td>
    </tr>
    
    <%
    request.setCharacterEncoding("utf-8");
    int pageSize=5;
    String currPageno=request.getParameter("pageIndex");
    if(currPageno==null){
        currPageno="1";
    }
    //当前页
    int pageNo=Integer.parseInt(currPageno);
    //总记录娄
    int recordCount=empService.getTotalCount();
    //每页显示记录数
    
    Page pages=new Page();
    //当前页
    pages.setCurrPageNo(pageNo);
    //页面显示多少条记录
    pages.setPageSize(pageSize);
    //总记录数
    pages.setRecordCount(recordCount);
    //总页数
    int totalPageCount=pages.settotalPageCountByRs();
    //对首面和最后一面设置不重小于1和大于最后一页
    if(pageNo<1){
        pageNo=1;
    }else if (pageNo>totalPageCount){
        pageNo=totalPageCount;
    }
    
    
     List<Emp> emplist=empService.getEmpByPage(pageNo, pageSize);
     for(Emp emp:emplist){
    %>
    <tr>
    <td><%=emp.getEmpno() %></td>
    <td><%=emp.getEname() %></td>
    <td><%=emp.getJob() %></td>
    <td><%=emp.getHiredate() %></td>
    <td><%=emp.getSal() %></td>
    <td><%=emp.getComm() %></td>
    <td><%=emp.getDeptno() %></td>
    </tr>
    <%
     }
    %>
    <tr>
    <td>共<%=recordCount %>条记录&nbsp;&nbsp; <%=pageNo %>/<%=totalPageCount %>页</td>
    <% //控制首页的显示
    if(pageNo>1){
    %>
    <td><a href="emp.jsp?pageIndex=1">首页</a></td>
    <td><a href="emp.jsp?pageIndex=<%=pageNo-1%>">上一页</a></td>
    <%
    }
    if(pageNo<totalPageCount){
        //控制最后一页的显示
    %>
    <td><a href="emp.jsp?pageIndex=<%=pageNo+1%>">下一页</a></td>
    <td><a href="emp.jsp?pageIndex=<%=totalPageCount%>">最后一页</a></td>
    <%
    }
    %>
    <td><input type="text" id="goid" name="goid"> </td>
    <td><a href="javascript:go();">GO</a></td>
    </tr>
    
    </table>
    
    </body>
    </html>

    4.3 实现页面Post方式

     小弟没持明白,搞明白了再写

  • 相关阅读:
    【VUE】5.路由导航守卫
    【VUE】4.配置axios发起请求
    【VUE】3.表单操作
    【GIT】命令笔记
    【VUE】2.渲染组件&重定向路由
    【Vue】1.前端项目初始化
    【PYTHON】操作excel笔记
    【Python】python 入门与进阶
    【flask-migrate】:ERROR [root] Error: Target database is not up to date.
    【Flask】学习笔记(一)入门
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4260347.html
Copyright © 2011-2022 走看看