在实际项目中,所需要展示的数据会有很多,分页是很有必要的。
那么分页的实现
1.首先定义一个工具类Page,在工具类中,定义系列属性
package com.stu_clss.utils;
import java.util.List;
/**
*
* @author ljf
*分页工具类 加入泛型
*/
public class Page<T> {
/*
* 封装属性
* 总记录数
* 总页数
* 当前页数
* 每页显示的条数
* 每页显示的数据集合
*/
private int totalcount; //总记录数
private int totalpage; //总页码
private int currentpage; //当前页码
private int rows; //每页显示的记录数
private List<T> list; //每页数据
public int getTotalcount() {
return totalcount;
}
public void setTotalcount(int totalcount) {
this.totalcount = totalcount;
}
public int getTotalpage() {
return totalpage;
}
public void setTotalpage(int totalpage) {
this.totalpage = totalpage;
}
public int getCurrentpage() {
return currentpage;
}
public void setCurrentpage(int currentpage) {
this.currentpage = currentpage;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
在工具类baseDao中定义查询数据库中总数量的方法
//查询数量
public int getobj(String sql, Class<T> Class,Object... params){
//创建queryrunner对象 导入连接池
QueryRunner qr = new QueryRunner(cmp);
//定义int变量 接收数据
int r = -1;
//执行sql
try {
r = ((Long) qr.query(sql, new ScalarHandler(),params)).intValue();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return r;
}
那么在对应的dao层接口定义三个方法
//查询总记录数
public int totalcounts(String ssname,String clid);
//计算每页记录
public List<Stu> pagecounts(int start, int rows_);
//分页
public List<Stu> getpage(String ssname,String clid,int start,int rows_);
在其实现类中编写语句,如何拼接sql是一个问题,
逐步实现方法,首先记录总数只需要实现类继承我们的baseDao即可,但在项目中我们还涉及到了模糊查询,也就意味着记录总数是要发生变化的,也就是需要我们灵活的拼接sql,我们在页面上设计了允许两个模糊查询条件sname和cid,并且无论用户输入哪种条件或者不输入条件,都应该有对应的语句执行。多种考虑后,我们选用集合来接收这两个字段。
@Override
public int totalcounts(String ssname,String clid) {
//编写sql
String sql = "select count(*) from stu where 1 = 1";
//定义集合接收
List<Object> glist = new ArrayList<Object>();
if(ssname != null && !ssname.equals("")){
sql = sql +" and sname like ?";
glist.add("%"+ssname+"%");
}
if(!clid.equals("-1") && !clid.equals("")){
sql = sql + " and cid = ?";
glist.add(clid);
}
//调用getobj方法查询数量
int rows = getobj(sql, Stu.class,glist.toArray());
return rows;
}
其次编写分页方法,将以上考虑编写到此方法中,并将得到的集合存储到Page中定义的list中
public Page<Stu> getpage(String ssname,String clid,int start,int rows_){
//编写sql
String sql = "select * from stu where 1 = 1";
//定义数组接收
List<Object> glist = new ArrayList<Object>();
if(ssname != null && !ssname.equals("")){
sql = sql +" and sname like ?";
glist.add("%"+ssname+"%");
}
if(!clid.equals("-1") && !clid.equals("")){
sql = sql + " and cid = ?";
glist.add(clid);
}
sql = sql + " order by cid limit ?,?";
glist.add(start);
glist.add(rows_);
//调用getall方法
List<Stu> sli = getall(sql,Stu.class,glist.toArray());
Page<Stu> page = new Page<Stu>();
page.setList(sli);
return page;
}
在service层实现类编写分页方法
public Page<Stu> getpage(String sname,String clid,String currentpage,String rows){
//创建page对象
Page<Stu> page = new Page<Stu>();
//设置参数
int currentpage_ = Integer.parseInt(currentpage);
int rows_ = Integer.parseInt(rows);
page.setCurrentpage(currentpage_);
page.setRows(rows_);
//调用dao层查总记录数
int totalcount = sd.totalcounts(sname,clid);
System.out.println(totalcount+"totalcount");
page.setTotalcount(totalcount);
//调用查寻list集合方法
//查看开始记录的索引
int start = (currentpage_ - 1) * rows_;
List<Stu> list = sd.getpage(sname,clid,start,rows_);
//设置集合
page.setList(list);
//计算总页码
int totalpage = (totalcount % rows_) == 0 ? totalcount / rows_ : (totalcount / rows_) + 1;
//设置参数
page.setTotalpage(totalpage);
for(Stu s:list){
//取出Stu所有信息的cid
int cid = s.getCid();
//创建Clss_dao对象
Clss_dao cd = new Clss_dao_impl();
//通过cid获取对应的Clss信息
Clss clss = cd.selectone(cid);
//将获取到的信息保存到Stu对象中
s.setClss(clss);
}
return page;
}
在对应的servlet中
//分页查询方法
public void pagecounts(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//修改字符集
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取页面传入的当前页数 页面条数
String currentpage = request.getParameter("currentpage");
if(currentpage == null){
currentpage = "1";
}
String rows = request.getParameter("rows");
rows="1";
//创建Stu_service对象
Stu_service sse = new Stu_service_impl();
//创建page对象接收数据
Page<Stu> page = new Page<Stu>();
//调用pagecounts方法
System.out.println(currentpage+rows+"pagecount");
page = sse.pagecounts(currentpage, rows);
System.out.println(page+"page");
//存入作用域中
request.setAttribute("stulist", page);
//转发
request.getRequestDispatcher("../../stuclss/Stuselectall.jsp").forward(request, response);
}