java分页的实现(后台工具类和前台jsp页面)
1、首先,新建一个类Page.java
public class Page implements Serializable {
private static final long serialVersionUID = -3198048449643774660L;
private int pageNow = 1; // 当前页数
private int pageSize = 10; // 每页显示记录的条数
private int totalCount; // 总记录条数
private int totalPageCount; // 总页数
private int startPos; // 开始位置,从0开始
//构造函数,参数:总记录数和当前页
public Page(int totalCount, int pageNow) {
this.totalCount = totalCount;
this.pageNow = pageNow;
}
//计算总页数,总页数=总记录数/每页显示记录的条数
public int getTotalPageCount() {
totalPageCount = getTotalCount() / getPageSize();
return (totalCount % pageSize == 0) ? totalPageCount : totalPageCount + 1;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
//取得选择记录的初始位置
public int getStartPos() {
return (pageNow - 1) * pageSize;
}
}
2、在Dao层加入两个方法,分别获取总的记录数和每页显示的list集合,DBUtil.java是数据库工具类。
// 获取总的记录数
public static int getCount() throws SQLException {
Connection conn = DBUtil.getConn();
PreparedStatement pst = null;
String sql = "select count(*) from users";
pst = conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
int count=0;
if(rs.next()){
count=rs.getInt(1);
}
DBUtil.close(conn, pst, rs);
return count;
}
// 分页查找
public static ArrayList<Users> findByPage(int pos, int size) throws SQLException {
Connection conn = DBUtil.getConn();
ArrayList<Users> userList = new ArrayList<Users>();
PreparedStatement pst = null;
String sql = "select * from users limit ?,?";
pst = conn.prepareStatement(sql);
pst.setInt(1, pos);
pst.setInt(2, size);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
Users user = new Users();
user.setUserid(rs.getInt(1));
user.setUsername(rs.getString(2));
}
DBUtil.close(conn, pst, rs);
return userList;
}
3、在Servlet中调用Dao层的方法,并向页面传递参数,
String pageNow=request.getParameter("pageNow");//获取当前页
int totalCount=UsersDao.getCount();//获取总的记录数
List<Users> userList=new ArrayList<Users>();
Page page=null;
if(pageNow!=null){
page=new Page(totalCount, Integer.parseInt(pageNow));
userList=UsersDao.findByPage(page.getStartPos(), page.getPageSize());//从startPos开始,获取pageSize条数据
}else{
page=new Page(totalCount, 1);//初始化pageNow为1
userList=UsersDao.findByPage(page.getStartPos(), page.getPageSize());//从startPos开始,获取pageSize条数据
}
request.setAttribute("page", page);
request.setAttribute("userList", userList);
request.getRequestDispatcher("/WEB-INF/views/homePage.jsp").forward(request, response);
4、在jsp页面中添加如下代码:
<body>
<div class="page_nav">
<c:choose>
<c:when test="${page.totalPageCount <= 10}"><!-- 如果总页数小于10,则全部显示 -->
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="${page.totalPageCount }"></c:set>
</c:when>
<c:when test="${page.pageNow <= 5 }"><!-- 如果总页数小于5,则显示1-10页 -->
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="10"></c:set>
</c:when>
<c:otherwise><!-- 否则,显示前5页和后5页,保证当前页在中间 -->
<c:set var="begin" value="${page.pageNow-5 }"></c:set>
<c:set var="end" value="${page.pageNow+5 }"></c:set>
<c:if test="${end > page.totalPageCount }"><!-- 如果end值小于总的记录数,则显示最后10页 -->
<c:set var="end" value="${page.totalPageCount}"></c:set>
<c:set var="begin" value="${end-10 }"></c:set>
</c:if>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${page.pageNow != 1 }"><!-- 如果当前页为1,则不显示首页和上一页 -->
<a href="?oper=login&pageNow=1">首页</a>
<a href="?oper=login&pageNow=${page.pageNow-1 }">上一页</a>
</c:when>
</c:choose>
<!-- 遍历页码 -->
<c:forEach begin="${begin }" end="${end }" var="index">
<c:choose>
<c:when test="${page.pageNow == index }"><!-- 如果为当前页,则特殊显示 -->
<a style="height:24px; margin:0 3px; border:none; background:#C00;">${index}</a>
</c:when>
<c:otherwise><!-- 否则,普通显示 -->
<a href="?oper=login&pageNow=${index }">${index }</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:choose>
<c:when test="${page.pageNow != page.totalPageCount }"><!-- 如果当前页为总的记录数,则不显示末页和下一页 -->
<a href="?oper=login&pageNow=${page.pageNow+1 }">下一页</a>
<a href="?oper=login&pageNow=${page.totalPageCount }">末页</a>
</c:when>
</c:choose>
共${page.totalPageCount }页,${page.totalCount }条记录 到第<input
value="${page.pageNow }" name="pn" id="pn_input" />页 <input
id="pn_btn" type="button" value="确定">
<script type="text/javascript">
//为按钮绑定一个单击响应函数
$("#pn_btn").click(function() {
//获取到要跳转的页码
var pageNow = $("#pn_input").val();
//通过修改window.location属性跳转到另一个页面
window.location = "?oper=login&pageNow=" + pageNow;
});
</script>
</div>
</body>
最后附上数据库工具类代码DBUtil:
package com.bwlu.common; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class DBUtil { private static String DRIVER = null; private static String URL = null; private static String USERNAME = null; private static String PASSWORD = null; static {
DRIVER = "com.mysql.jdbc.Driver";
URL = "jdbc:mysql://localhost:3306/mytest";
USERNAME = "root";
PASSWORD = "mysql";
} public static Connection getConn() {
Connection conn = null;
try {
/* 加载驱动 */
// System.out.println(DRIVER);
Class.forName(DRIVER);
/* 获取连接 */
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} // 关闭连接
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
DBUtil
SSM框架中【MyBatis分页语句】
UsersMapper.java
public interface UsersMapper {
// 获取分页记录,startPos:从第几行开始获取,pageSize:获取的条数
List<Users> selectByPage(@Param(value = "startPos") Integer startPos,
@Param(value = "pageSize") Integer pageSize);
// 获取数据库总的记录数,返回users表中总的记录条数
int getCount();
}
UsersMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bwlu.mapper.UsersMapper" >
<resultMap id="BaseResultMap" type="com.bwlu.bean.Users" >
<id column="userId" property="userid" jdbcType="INTEGER" />
<result column="userName" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="userEmail" property="useremail" jdbcType="VARCHAR" />
<result column="permission" property="permission" jdbcType="INTEGER" />
</resultMap> <!-- 分页SQL语句 -->
<select id="selectByPage" resultMap="BaseResultMap">
select * from Users limit #{startPos},#{pageSize}
</select>
<!-- 取得记录的总数 -->
<select id="getCount" resultType="java.lang.Integer">
SELECT COUNT(*) FROM Users
</select>
</mapper>
java分页的实现(后台工具类和前台jsp页面)的更多相关文章
- Java操作文件夹的工具类
Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...
- Java汉字转成汉语拼音工具类
Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...
- java中excel导入\导出工具类
1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...
- java中定义一个CloneUtil 工具类
其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力, 就需要实现Cloneable接口,重写clone方法.通 ...
- java代码行数统计工具类
package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...
- Java加载Properties配置文件工具类
Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...
- Java 操作Redis封装RedisTemplate工具类
package com.example.redisdistlock.util; import org.springframework.beans.factory.annotation.Autowire ...
- 【转】Java压缩和解压文件工具类ZipUtil
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- DateHandler日期处理工具(JSP中使用后台工具类)
1.DateHandler.java package Utils.dateHandler; import java.text.ParseException; import java.text.Simp ...
随机推荐
- 如何阅读不同格式的Ubuntu/Linux帮助文档
Ubuntu和Linux的帮助文档有各种各样的格式,下面简单说下如何阅读这些帮助文档. 1)通过man命令阅读软件或命令的manual page.例如阅读man命令的manual页面可使用如下命令: ...
- 全局安装了express框架,但是无法使用express指令的问题
错误截图: 产生这个错误的原因是:我安装的是express4版本,需要安装express-generator才能使用express命令 将express-generator安装后就都解决了:
- TADDConnetion组件,TADOQuery
一.TADDConnetion 二.TADOQuery 1.RecNo:从1开始 当前记录行数;ADOQuery1.RecNo 选择后一行数据集内容:ADOQuery1.RecNo:=ADOQuery ...
- Android 使用 WebView
package gzdewei.com.android; import android.app.Activity; import android.os.Bundle; import android.v ...
- Tornado源码浅析
初识tornado 经典的hello world 案例: import tornado.ioloop import tornado.web class MainHandler(tornado.web. ...
- 如何查看python的api
如何查看python selenium的api 经常发现很多同学装好了python+selenium webdriver开发环境后不知道怎么去查看api文档,在这里乙醇简单介绍一下具体方法,其实非 ...
- Qt 打印机支持模块
Qt 打印支持 Qt为打印提供广泛的跨平台支持.使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机,并通过网络打印到远程打印机.Qt的打印系统还支持PDF文件生成,为基本的报告生成设施奠定了 ...
- 解决跨域HttpResponseJsonCORS, HttpResponseCORS 返回字典数据
#!/usr/bin/python # -*- coding: UTF-8 -*- import json from django.http import HttpResponse def HttpR ...
- 汉澳sinox2014没有黑屏,一个能够依靠的安全避风港
首先汉澳sinox2014没有验证server,根本就没办法区分正版和盗版 其次汉澳sinox2014安装也没有系列号cdkey等东西,直接安装无干扰 最后汉澳sinox2014不会有黑屏这样的东西. ...
- 收藏:几种开源许可证的区别!——By 阮一峰制作
乌克兰程序员Paul Bagwell,画了一张分析图,下面是阮一峰制作的中文版,非常棒,绝对的好东西,收藏这张图供日后查看: