zoukankan      html  css  js  c++  java
  • Java 实现分页功能

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8
    user=LF
    password=LF
    package cn.zr.testpage.entity;
    
    public class User {
        
        private String name;
        private int age;
        private String hobby;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getHobby() {
            return hobby;
        }
        public void setHobby(String hobby) {
            this.hobby = hobby;
        }
        public User() {
        }
        public User(String name, int age, String hobby) {
            this.name = name;
            this.age = age;
            this.hobby = hobby;
        }
        @Override
        public String toString() {
            return "User [name=" + name + ", age=" + age + ", hobby=" + hobby + "]";
        }
        
        
        
    }
    package cn.zr.testpage.service;
    
    import java.util.List;
    
    import cn.zr.testpage.entity.User;
    import cn.zr.testpage.utils.Page;
    
    public interface UserService {
    
        /**
         * 获取总数量
         * @return 返回总数
         */
        int getAmount();
    
        /**
         * 获取当前页的数据
         * @param page 
         * @return 返回前页的数据
         */
        List<User> getUserInfo(Page page);
    
    }
    package cn.zr.testpage.service.impl;
    
    import java.util.List;
    
    import cn.zr.testpage.dao.UserDao;
    import cn.zr.testpage.dao.impl.UserDaoImpl;
    import cn.zr.testpage.entity.User;
    import cn.zr.testpage.service.UserService;
    import cn.zr.testpage.utils.Page;
    
    public class UserServiceImpl implements UserService {
        private UserDao userDao;
        // 通过代码块加载实现类
        {
            userDao = new UserDaoImpl();
        }
        
        @Override
        public int getAmount() {
            return userDao.getAmount();
        }
    
        @Override
        public List<User> getUserInfo(Page page) {
            return userDao.getUserInfo(page);
        }
    
    }
    package cn.zr.testpage.dao;
    
    import java.util.List;
    
    import cn.zr.testpage.entity.User;
    import cn.zr.testpage.utils.Page;
    
    public interface UserDao {
    
        /**
         * 获取总数量
         * @return 返回总数
         */
        int getAmount();
    
        /**
         * 获取当前页的数据
         * @param page 
         * @return 返回前页的数据
         */
        List<User> getUserInfo(Page page);
    
    }
    package cn.zr.testpage.dao.impl;
    
    
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import cn.zr.testpage.dao.UserDao;
    import cn.zr.testpage.entity.User;
    import cn.zr.testpage.utils.JdbcUtils;
    import cn.zr.testpage.utils.Page;
    import cn.zr.testpage.utils.UserBasicalImpl;
    
    public class UserDaoImpl extends UserBasicalImpl implements UserDao{
        
        
        /**
         * 获取总数
         */
        @Override
        public int getAmount() {
            connection = JdbcUtils.getConnection();
            String sql = "SELECT COUNT(*) FROM USERINFO";
            int count = 0;
            try {
                pStatement = connection.prepareStatement(sql);
                rSet = pStatement.executeQuery();
                if(rSet.next()){
                    count = rSet.getInt(1);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                // 调用父类方法关闭资源
                super.close();
            }
            return count;
        }
    
        /**
         * 获取当前页的数据
         * @param page 
         * @return 返回前页的数据
         */
        @Override
        public List<User> getUserInfo(Page page) {
    
            connection = JdbcUtils.getConnection();
            //基于MySQL的函数的分页
            String sql = "SELECT 姓名,年龄,爱好 FROM USERINFO LIMIT ?,?";
            // 创建集合
            List<User> list = new ArrayList<User>();
            try {
                pStatement = connection.prepareStatement(sql);
                //设置相关参数
                pStatement.setInt(1, page.getStart());
                pStatement.setInt(2, page.getSize());
                rSet = pStatement.executeQuery();
                while(rSet.next()){
                    User user = new User();
                    user.setName(rSet.getString("姓名"));
                    user.setAge(rSet.getInt("年龄"));
                    user.setHobby(rSet.getString("爱好"));
                    list.add(user);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                // 调用父类方法关闭资源
                super.close();
            }
            return list;
        }
    
    }
    package cn.zr.testpage.servlet;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.zr.testpage.entity.User;
    import cn.zr.testpage.service.UserService;
    import cn.zr.testpage.service.impl.UserServiceImpl;
    import cn.zr.testpage.utils.BaseServlet;
    import cn.zr.testpage.utils.Page;
    
    public class ListServlet extends BaseServlet{
    
        private static final long serialVersionUID = 1L;
    
        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            
            System.out.println("...doGet...");
            
            // 获取当前页
            String curpage = req.getParameter("curpage");
            UserService userService = new UserServiceImpl();
            // 获取总数量
            int count = userService.getAmount();
            //字符串转成整型
            int currentpage = super.currentPage(curpage);
            // 创建page对象
            Page page = new Page(count, currentpage, pagesize);
            // 获取当前页的数据
            List<User> users = userService.getUserInfo(page);
            //将相关数据存储起来
            req.setAttribute("page", page);
            req.setAttribute("users", users);
            
            System.out.println(count);
            System.out.println(users);
            //转发
            req.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(req, resp);
    
            
            
        }
        
        
    }
    package cn.zr.testpage.utils;
    
    import javax.servlet.http.HttpServlet;
    
    
    public class BaseServlet extends HttpServlet {
        
        public int pagesize = 2;
        
        
        public int currentPage(String cpage){
            int currentpage = cpage!=null && !"".equals(cpage) && isint(cpage)? currentpage=Integer.parseInt(cpage):1;
            return currentpage;
        }
        
        public boolean isint(String str){
            boolean bo = true;
            try {
                Integer.parseInt(str);
            } catch (Exception e) {
                bo = false;
            }
            return bo;
        }
        
    
    }
    package cn.zr.testpage.utils;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    /**
     * 
     * @author lf
     *
     */
    public class JdbcUtils {
        
        // 获取数据库连接
        public static Connection getConnection() {
            String url="jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&amp;characterEncoding=utf8";
            String user="LF";
            String password ="LF";
            Connection connection = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            
            try {
                connection =  DriverManager.getConnection(url, user, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            return connection;
        }
    }
    package cn.zr.testpage.utils;
    
    
    public class Page {
    
        // 页数(第几页)
        private int currentpage;
    
        // 查询数据库里面对应的数据有多少条
        private int total;// 从数据库查处的总记录数
    
        // 每页查询的数量条
        private int size;
    
        // 下页
        private int next;
    
        // 最后一页
        private int last;
        
        private int lpage;
        
        private int rpage;
        
        //从哪条开始查
        private int start;
        
        public Page() {
            super();
        }
    
        public int getCurrentpage() {
            return currentpage;
        }
    
        /****
         * 
         * @param currentpage
         * @param total
         * @param pagesize
         */
        public void setCurrentpage(int currentpage,int total,int pagesize) {
            //如果整除表示正好分N页,如果不能整除在N页的基础上+1页
            int totalPages = total%pagesize==0? total/pagesize : (total/pagesize)+1;
            
            //总页数
            this.last = totalPages;
            
            //判断当前页是否越界,如果越界,我们就查最后一页
            if(currentpage>totalPages){
                this.currentpage = totalPages;
            }else{
                this.currentpage=currentpage;
            }
            if(currentpage<=0){
                this.currentpage=1;
            }
            
            //计算start   1----0    2  ------ 5
            this.start = (this.currentpage-1)*pagesize;
            
        }
    
        public int getTotal() {
            return total;
        }
    
        public void setTotal(int total) {
            this.total = total;
        }
    
        public int getSize() {
            return size;
        }
    
        public void setSize(int size) {
            this.size = size;
        }
    
        public int getNext() {
            return  currentpage<last? currentpage+1: last;
        }
    
    
        //上一页
        public int getUpper() {
            return currentpage>1? currentpage-1: currentpage;
        }
    
        public int getLast() {
            return last;
        }
    
        //总共有多少页,即末页
        public void setLast(int last) {
            this.last = total%size==0? total/size : (total/size)+1;
        }
        
    
        public int getLpage() {
            return lpage;
        }
    
        public void setLpage(int lpage) {
            this.lpage = lpage;
        }
    
        public int getRpage() {
            return rpage;
        }
    
        public void setRpage(int rpage) {
            this.rpage = rpage;
        }
    
        /****
         * 
         * @param total   总记录数
         * @param currentpage    当前页
         * @param pagesize    每页显示多少条
         */
        public Page(int total,int currentpage,int pagesize) {
            //总记录数
            this.total = total;
            //每页显示多少条 
            this.size=pagesize;
            
            //计算当前页和数据库查询起始值以及总页数
            setCurrentpage(currentpage, total, pagesize);
            
            //分页计算
            int leftcount =5,    //需要向上一页执行多少次
                rightcount =4;
            //起点页
            this.lpage =currentpage;
            //结束页
            this.rpage =currentpage;
            
            //2点判断
            this.lpage = currentpage-leftcount;            //正常情况下的起点
            this.rpage = currentpage+rightcount;        //正常情况下的终点
            
            //页差=总页数和结束页的差
            int topdiv = this.last-rpage;                //判断是否大于最大页数
            
            /***
             * 起点页
             * 1、页差<0  起点页=起点页+页差值
             * 2、页差>=0 起点和终点判断
             */   
            this.lpage=topdiv<0? this.lpage+topdiv:this.lpage;
            
            /***
             * 结束页
             * 1、起点页<=0   结束页=|起点页|+1
             * 2、起点页>0    结束页
             */
            this.rpage=this.lpage<=0? this.rpage+(this.lpage*-1)+1: this.rpage;
            
            /***
             * 当起点页<=0  让起点页为第一页
             * 否则不管
             */
            this.lpage=this.lpage<=0? 1:this.lpage;
            
            /***
             * 如果结束页>总页数   结束页=总页数 
             * 否则不管
             */
            this.rpage=this.rpage>last? this.last:this.rpage;
        }
        
        
        
    
        public int getStart() {
            return start;
        }
    
    }
    package cn.zr.testpage.utils;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class UserBasicalImpl {
        
        protected Connection connection;
        protected PreparedStatement pStatement;
        protected ResultSet rSet;
        
        public void close(){
            // 关闭资源
            try {
                if (rSet!=null) {
                    rSet.close();
                }
                if (pStatement!=null) {
                    pStatement.close();
                }
                if (connection!=null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>用户信息</title>
    
      </head>
      
      <body>
    
        <table>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>爱好</th>
            </tr>
            <c:forEach items="${users }" var="user" varStatus="userindex">
                <tr>
                    <td>${user.name }</td>
                    <td>${user.age }</td>
                    <td>${user.hobby }</td>
                </tr>
            </c:forEach>
        </table>    
    
        <div>
            <a href="?curpage=1">首页</a>
            <c:forEach begin="${page.lpage}" end="${page.rpage}" var="pageNum">
                <a href="?curpage=${pageNum }">${pageNum }</a>
            </c:forEach>
            <a href="?curpage=${page.last }">尾页</a>
        </div>
        
    
      </body>
    </html>
  • 相关阅读:
    vue----计算与监听属性
    vue---条件与循环语句
    vue--模板语法
    git版本控制系统--介绍
    HttpWebRequest使用总结
    计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
    130 个相见恨晚的超实用网站,一次性分享出来
    实现客户端与服务端的HTTP通讯
    默认网关(地址)
    .NET Reactor使用教程(加密源代码示例)
  • 原文地址:https://www.cnblogs.com/lantu1989/p/6403108.html
Copyright © 2011-2022 走看看