Java 实现分页功能

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8
user=root
password=root

cn.zr.testpage.entity.User.java

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;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", hobby=" + hobby + "]";}
}

cn.zr.testpage.service.UserService.java

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);
}

cn.zr.testpage.service.impl.UserServiceImpl.java

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();}@Overridepublic int getAmount() {return userDao.getAmount();}@Overridepublic List<User> getUserInfo(Page page) {return userDao.getUserInfo(page);}
}

cn.zr.testpage.dao.UserDao.java

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);
}

cn.zr.testpage.dao.impl.UserDaoImpl.java

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{/*** 获取总数*/@Overridepublic 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 返回前页的数据*/@Overridepublic 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;}
}

cn.zr.testpage.servlet.ListServlet.java

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;@Overridepublic 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);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);}
}

cn.zr.testpage.utils.BaseServlet.java

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;}
}

cn.zr.testpage.utils.JdbcUtils.java

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="root";String password ="root";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;}
}

cn.zr.testpage.utils.Page.java

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  ------ 5this.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;}}

cn.zr.testpage.utils.UserBasicalImpl.java

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();}}
}

jsp/jstl/core

<%@ 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>

Java 实现分页功能相关推荐

  1. java实现分页功能(一)

    分析: 首先,需要获取总的记录数 我们用 int totalCount;表示,有了总的记录数后我们需要写一个分页算法,将其数据合理的分布在页面上. 分页算法:总页码=总记录数%每页显示的条数==0?总 ...

  2. Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。

    1.首先定义了一个PageUtil的类,看了网上的很多教程,貌似都有一个这样的类,自己也定义了一个.在代码编写过程中发现这个类其实也没有那么大的作用,但是不去定义这个类,感觉好像缺少什么似得.(请高手 ...

  3. java代码实现分页_Java实现简单的分页功能

    本文实例为大家分享了java实现分页功能的具体代码,供大家参考,具体内容如下 不用根据改变sql的形式去查询; 直接查询所有的数据,根据页码自动显示数据; 分页对象 public class page ...

  4. JAVA如何处理上一篇下一篇,Java中如何实现分页功能

    Java中如何实现分页功能 时间:2017-10-10     来源:华清远见Java培训中心 内容多了,我们就会想要去做分页,既能提升用户体验,又减少页面体积,提升加载速度.那么Java中怎么实现分 ...

  5. java jdbc标签jsp_jsp+servlet+javabean+jdbc实现增删改查和分页功能 案例源码

    [实例简介] 客户管理案例 1.目的:总结JDBC,和Servlet JSP结合到一起. 2.开发中的一些小技巧. 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * ...

  6. java web几百万分页_举例详解用Java实现web分页功能的方法

    举例详解用Java实现web分页功能的方法 发布于 2020-11-25| 复制链接 摘记: 分页问题是一个非常普遍的问题,开发者几乎都会遇到,这里不讨论具体如何分页,说明一下Web方式下分页的原理. ...

  7. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  8. 手把手带你写代码,完美实现Java分页功能

    小伙伴们应该都知道,我们在项目开发中经常要用到分页功能,现在我们一般都会使用各种分页插件来进行快速实现.不过在面试的时候,面试官有时会问我们分页的实现过程与原理,这就有点让人防不胜防了.所以为了防止大 ...

  9. java使用Apache poi根据word模板生成word报表(增加插入符号、控制分页功能)

    原文链接:https://blog.csdn.net/u012775558/article/details/79678701 根据原代码新增了插入符号和控制分页功能.改了类名,一些方法,新增一个符号类 ...

最新文章

  1. 11.Map集合之实现类HashMapHashtableTreeMapLinkedHashMapProperties浅析
  2. 常见数控机床的数据采集方法比较
  3. .NET 5 自身就是一个 .NET Standard
  4. apache camel_轻量级的开源集成:Apache Camel还是Spring集成?
  5. 【转】数据库水平扩展与垂直扩展
  6. 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
  7. vs 2005 thread 无法调试
  8. 让mysql timeStamp类型支持默认值0000-00-00 00:00:00
  9. MongoDB 复制集(Replica Set) 配置(Windows 版)
  10. 使用 Sublime开发 Jade
  11. mysql与es数据一致性_ElasticSearch 如何保证数据一致性,实时性
  12. Java~基于fluent-hc快速构建Http请求,结合failsafe实现异常重试
  13. flexbox:1.0.0_了解Flexbox:您需要了解的一切
  14. [转帖]一些不该被埋没的好歌【全版】【2】
  15. QT项目--简易音乐播放器
  16. matlab如何定义dmod函数,matlab中的dmod函数
  17. 天行健,君子以自强不息;地势坤,群子以厚德载物。
  18. 专升本英语——语法知识——高频语法——第四节 定语从句(限制性定语从句-非限制性定语从句)【学习笔记】
  19. 跨平台第三方平台登录和单点登录
  20. 《那些年啊,那些事——一个程序员的奋斗史》——43

热门文章

  1. 使用photoswipe展示图片
  2. 项目中常用的Util方法
  3. 华为OD-Java面经
  4. C++ std::string::find()函数(在字符串中查找内容)
  5. matlab中的strfind和findstr函数
  6. 初探密码破译:Metropolis-Hastings算法破解密文
  7. kafka监控获取logSize, offset, lag等信息
  8. 全志VR9虚拟现实专用芯片处理器介绍
  9. 服务器怎样创建多台虚拟主机,服务器是如何实现多台虚拟主机
  10. nginx配置域名访问/禁止ip访问