servlet jsp实现分页功能代码解析(一)
1、
模拟实现过程:
目录结构


2、 model层,一个数据库对应的model(Blog),还有一个pageBean(BlogPage)
import java.sql.Date;
public class Blog {
private int id;
private int category_id;
private String title;
private String content;
private Date created_time;
//getter和setter方法
@Override
public String toString() {
return "Blog [id=" + id + ",
category_id=" + category_id + ",
title=" + title + ",
content=" + content + ",
created_time=" + created_time + "]"; } }
public class BlogPage {
private List<Blog> pagerecord;//每页记录
private int pageno;//当前页
private int pagenostart;//每页开始索引
private int pagesize=5;//每页多少数据
private int totalrecord;//总记录数
private int totalpage;//总页数
public BlogPage(int pageno,int totalrecord){
//pageno totalrecord都可以当做已有信息
this.totalrecord=totalrecord;
//计算总页数
totalpage=(totalrecord%pagesize==0)?totalrecord/pagesize:totalrecord/pagesize+1;
//pageno的边界处理
if(pageno<=1) this.pageno=1;
else if(pageno>=totalpage) this.pageno=totalpage;
else this.pageno=pageno;
//计算每页开始索引,即每页第一个数据的索引,用于分页查询
pagenostart=(this.pageno-1)*pagesize;
}
public int getPagenostart() {
return pagenostart;
}
public void setPagenostart(int pagenostart) {
this.pagenostart = pagenostart;
}
public List<Blog> getPagerecord() {
return pagerecord;
}
public void setPagerecord(List<Blog> pagerecord) {
this.pagerecord = pagerecord;
}
public int getPageno() {
return pageno;
}
public void setPageno(int pageno) {
this.pageno = pageno;
}
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; }}
3、dao层
JDBCUtil封装了jdbc的连接和释放操作
public class JDBCUtil {
private static String url = "jdbc:mysql://localhost:3306/blogs_stu";
private static String username = "root";
private static String password = "";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
} }
public static Connection getConnection(){
Connection conn; try {
conn= DriverManager.getConnection(url, username, password);
return conn;
} catch (SQLException e) {
e.printStackTrace(); }
return null; }
public static void release(ResultSet rs,PreparedStatement ps,Connection conn){
if(rs!=null){
try {
rs.close(); }
catch (SQLException e) {
e.printStackTrace(); } }
if(ps!=null){
try { ps.close(); }
catch (SQLException e) {
e.printStackTrace(); } }
if(conn!=null){
try { conn.close(); }
catch (SQLException e) { e.printStackTrace(); } } }}
4、 public class BlogDao {
//每页的记录,传入每页开始索引和每页大小用于分页,即limit的两个参数(mysql分页用limit)
public List<Blog> getPageRecord(int pagenostart, int pagesize) {
Connection conn = JDBCUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null; String sql = "select * from blog limit ?,?";
List<Blog> list = new ArrayList<Blog>();
try {
ps = conn.prepareStatement(sql);
ps.setInt(1, pagenostart); ps.setInt(2, pagesize);
rs = ps.executeQuery();
while (rs.next()) {
Blog blog = new Blog();
blog.setId(rs.getInt("id"));
blog.setCategory_id(rs.getInt("category_id"));
blog.setTitle(rs.getString("title"));
blog.setContent(rs.getString("content"));
blog.setCreated_time(rs.getDate("created_time"));
list.add(blog); }
return list; }
catch (SQLException e) { e.printStackTrace(); }
finally { JDBCUtil.release(rs, ps, conn); }
return null; }
//总记录数
public int getTotal() {
Connection conn = JDBCUtil.getConnection();
PreparedStatement ps = null; ResultSet rs = null;
try {
ps = conn.prepareStatement("select count(*) from blog");
rs = ps.executeQuery();
if (rs.next()) { return rs.getInt(1); } }
catch (SQLException e) { e.printStackTrace(); }
finally { JDBCUtil.release(rs, ps, conn); } return 0; }}
5、service层
public class BlogService {
BlogDao blogDao = new BlogDao();
//返回pagebean,所有分页需要的信息都去pagebean里查找
public BlogPage findPageRecord(int pageno) {
int totalrecord = blogDao.getTotal();
BlogPage blogpage = new BlogPage(pageno, totalrecord);
List<Blog> list = blogDao.getPageRecord(blogpage.getPagenostart(),blogpage.getPagesize()); blogpage.setPagerecord(list); return blogpage; } }