分页问题学习及一些小结
1.首先我们想象一下我们的分页页面中有哪些内容
然后我们知道查询分页数sql 语句是:
Select * frombs_book limit index, pageSize
所以加一个字段 index
这样我们就分析出来Page<T>类(泛型 是因为我们以后可能还要对别的不仅是图书分页)
class Page<T>
//页码
//这个我们可以从前台获取回来
pageNumber
//我们也可以通过前台设置 或者我们在Servlet中设置其大小 也就是每页显示的条数
pageSize
//查询要用到的下标
index //这个我们是通过计算得到的 index = (pageNumber-1)* pageSize
//总的记录数
totalRecord //我们通过数据库 便可以查询的到
//总的页数我们也可以通过计算得到
totalPage //(totalRecord -1 ) / pageSize + 1
//查询到的数据列表
List<T> data;//通过数据库sql = Select * from bs_book limit index, pageSize
2.我们利用创建好的page类就可以封装对象啦
a.首先我们拿到的page 对象 他的pageSize 和 pageNumber 是有的
所以接下来 我们应该设计BookDao 增加一个 查询分页图书的方法
Page<Book>findPage(page<Book> page);
b.我们在其实现类中 实现其方法
Page<Book>findPage(page<Book> page){
//首先我们可以通过数据库查询到page对象中总记录数
String sql = “select count(*) from bs_book ”
//调用baseDao中的getSingleValue()注意这查询出来的是long 类型的我们必须得强转
long total Rcord = (long)this.getSingleValue(sql);
//设置这个totalRecord到page中
page.setTotalRecord((int) total Rcord);
//获取index
Int index = page.getIndex();
然后我们就可以查询数据库了
sql = selet title … from bs_book limit ?,?;
List<Book> list = this.getBeanList(sql,index,page,getPageSize());
//然后将查询到的list放进page中
page.setData(list);
return page;
}
c.接下来我们可以完成我们的Service方法了
在BookService接口 新增添一个方法
Page<Book>findPage(String pageNumber, int pageSize);
那么我们就在实现类中实现这个方法
Page<Book>findPage(String pageNumber, int pageSize){
//我们得对这个pageNumber进行强转 , 但我们需要得考虑 万一强转失败之后的一些问题
所以我们先默认一个值为1
int pn = 1;
try{
pn =Integer.parseInt(pageNumber);
}catch(){}
然后创建page对象
Page<Book> page = newPage<Book>();
page.setPageNumber(pn);
page.setPageSize(pageSize);
//然后调用BookDao中的findPage()方法 获取到完整的page对象