分页
什么是分页?
我们用网站查询信息时,经常会看到
第N页/总M页 首页 1 2 3 4 5 6 7 8 9 尾页 下一页
分页就是将数据分页数来显示
为什么要分页?
1.我们查询数据时如果数据量太多,一次全部传输,会影响性能和效率。
2.用户在一页上看到成千上万行数据也会影响用户体验,所以我们一次只查询一页的数据。
进行分页所需要的数据
-当前页码:我们点击页码,数据库就要查询当前页码对应的数据。
-总页数:可以通过全部数据的总数除以每页显示的数据数来得到。
-当前页的数据:当前页的数据。
-全部数据数:数据库里总共有多少数据
-每页显示的数据(自己规定):一页显示的数据数
分页Bean的设计
这些分页数据总要在各层之间来回的传递
例如 :
需要从jsp页面将当前点击的页码传递
servlet需要向service层传递页码和我们规定的每页显示的数据数
service层要调用dao层完成对数据的操作。
所以我们把这些分页数据封装到一个javabean中,以方便传递,它就叫分页Bean,例如:PageBean
分页Bean
public class PageBean<T> {
private int currentPage; // 当前的页码
private int totalData; //全部数据的总数量
private int pageData; //每页显示的数据数
private List<T> beanList; //当前页的数据
private String url; //用来存放查询的条件
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPages() { //获取总页数
int totalpages=totalData/pageData; //总页数可以通过数据数除以每页的数据数得到
return totalData%pageData==0?totalpages:totalpages+1;
}
public void setTotalData(int totalData){
this.totalData=totalData;
}
public int getTotalData() {
return totalData;
}
public int getPageData() {
return pageData;
}
public void setPageData(int pageData) {
this.pageData = pageData;
}
public List<T> getBeanList() {
return beanList;
}
public void setBeanList(List<T> beanList) {
this.beanList = beanList;
}
}
各层的分工
jsp页面:显示分页的链接,传递当前的页码 例如:第N页/总M页 首页 1 2 3 4 5 6 7 8 9 尾页 下一页
servlet层:获取当前页码,指定每页显示的数据数,传递给service层,得到pageBean对象,把pageBean对象保存到request域,转发给页面
service层:获取当前页码和每页显示的数据数,调用DAO层方法
DAO层:获取当前页码和每页数据数,查询数据库得到全部数据数和当前页面要显示的数据,封装到pageBean中,返回pageBean对象。
解决jsp页面中页码列表的显示
页码列表 :1 2 3 4 5 6 7 8 9 10
-首先我们定为每页最多显示十个页码。
-当前页码在页码列表的位置。
其实定下来页码列表需要开始位置begin和结束位置end。
例如:1 2 3 4 5 6 7 8 9 10
我们参照百度发现,我们点击1到6时,页码列表不变。
当我们点击7时,begin=7-5,end=7+4
页码列表:2 3 4 5 6 7 8 9 10 11
当我们点击8时,begin=8-5,end=8+4
页码列表:3 4 5 6 7 8 9 10 11 12
通过我们的测试得到开始位置和结束位置的计算方法
-如果总页数<=10,那么begin=1,end=总页数
-大于10时,begin=当前页数-5,end=当前页数+4
-当点击的当前页数<5时,因为begin=当前页数-5,会出错,所以begin<1时,让begin=1
-当当前页数>总页数时会出错,因为end=当前页数+5,所以end>总页数时,就让end=总页数
然后我们循环遍历begin到end,就可以得出页码列表。
解决超链接保存参数问题
当使用多条件查询后,我们第一次查出来的是正确结果,然后当我们点击第2 页时,这个第2页超链接没有条件了,所以会丢失条件,所以我们需要在页面上的所有链接都要保留条件!
我们要把条件以一个字符串的形式保存到PageBean的url中!这个任务交给Servlet!
好了,分页中所有该了解的问题都已经解决,我们现在来做一个练习项目
客户管理系统
功能需求
添加客户
查看所有客户
编辑客户
删除客户
多条件组合查询
第一步,先创建客户数据表
CREATE TABLE customer(
cid CHAR(32) PRIMARY KEY, //id
cname VARCHAR(40) NOT NULL, //名字
gender VARCHAR(6) NOT NULL, //性别
birthday DATE, //生日
cellphone VARCHAR(15) NOT NULL, //电话
email VARCHAR(40), //email邮箱
description VARCHAR(500) //描述
);
第二步:创建项目,导入jar包
需要导入数据库驱动,c3p0连接池,dbutils等jar包
第三步:创建包
我们使用MVC模式进行编写,所以我们需要分为三层。
domain:Customer :JavaBean,用来将客户数据封装成一个对象
dao:CustomerDao :dao层,对数据的操作
service:CustomerService:service层,业务逻辑的操作
servlet:CustomerServlet:web层
第四步:编写jsp页面
top.jsp:
包含
一个标题
链接1:添加客户,请求add.jsp;
链接2:查看客户,请求list.jsp;
链接3:高级搜索,请求query.jsp;
add.jsp:一个添加客户的表单;
list.jsp:一个<table>用来显示所有客户;
query.jsp:一个高级搜索的表单;
edit.jsp:一个修改客户的表单;
msg.jsp:用来显示信息(添加客户成功)
top.jsp
一个标题
三个链接:添加用户,查询客户,高级搜索
<body style="text-align: center;">
<h1>客户关系管理系统</h1>
<a href="<c:url value='/add.jsp'/>">添加客户</a> |
<a href="<c:url value='/CustomerServlet?m=findAll'/>">查询客户</a> |
<a href="<c:url value='/query.jsp'/>">高级搜索</a>
</body>
add.jsp
包含一个添加用户的表单
<h3 align="center">添加客户</h3>
<form action="<c:url value='/CustomerServlet'/>" method="post">
<input type="hidden" name="m" value="add" />
<table border="0" align="center" width="40%" style="margin-left: 100px;">
<tr>
<td width="100px">客户名称</td>
<td width="40%">
<input type="text" name="cname"/>
</td>
<td align="left">
<label id="cnameError" class="error"> </label>
</td>
</tr>
<tr>
<td>客户性别</td>
<td>
<input type="radio" name="gender" value="男" id="male"/>
<label for="male">男</label>
<input type="radio" name="gender" value="女" id="female"/>
<label for="female">女</label>
</td>
<td>
<label id="genderError" class="error"> </label>
</td>
</tr>
<tr>
<td>客户生日</td>
<td>
<input type="text" name="birthday" id="birthday" readonly="readonly"/>
</td>
<td>
<label id="birthdayError" class="error"> </label>
</td>
</tr>
<tr>
<td>手机</td>
<td>
<input type="text" name="cellphone"/>
</td>
<td>
<label id="cellphoneError" class="error"> </label>
</td>
</tr>
<tr>
<td>邮箱</td>
<td>
<input type="text" name="email"/>
</td>
<td>
<label id="emailError" class="error"> </label>
</td>
</tr>
<tr>
<td>描述</td>
<td>
<textarea rows="5" cols="30" name="description"></textarea>
</td>
<td>
<label id="descriptionError" class="error"> </label>
</td>
</tr>
<tr>
<td> </td>
<td>
<input type="button" value="添加客户" onclick="add()"/>
<input type="reset" value="重置"/>
</td>
<td> </td>
</tr>
</table>
</form>
</body>
list.jsp
用来显示所有的客户。
<body>
<h3 align="center">客户列表</h3>
<table border="1" width="70%" align="center">
<tr>
<th>客户姓名</th>
<th>性别</th>
<th>生日</th>
<th>手机</th>
<th>邮箱</th>
<th>描述</th>
<th>操作</th>
</tr>
<c:forEach items="${pb.beanList}" var="cstm"> //获取servlet中保存的分页Bean中的当前页数据
<tr>
<td>${cstm.cname}</td> //显示名字等信息
<td>${cstm.gender}</td>
<td>${cstm.birthday}</td>
<td>${cstm.cellphone}</td>
<td>${cstm.email}</td>
<td>${cstm.description}</td>
<td>
<a href="<c:url value='/CustomerServlet?m=load&cid=${cstm.cid }'/>">编辑</a>
<a href="<c:url value='/CustomerServlet?m=delete&cid=${cstm.cid }'/>">删除</a>
</td>
</tr>
</c:forEach>
</table>
<!--分页-->
<center>
<!--显示当前第几页/共几页-->
第${pb.currentPage }页/共${pb.totalPages }页
<!--设置首页连接,获取PageBean中保存的url并传递页码为1-->
<a href="${pb.url}¤tpage=1">首页</a>
<!--判断当前页是否是第一页,如果是第一页,就没有上一页的链接-->
<c:if test="${pb.currentPage>1 }">
<a href="${pb.url}¤tpage=${pb.currentPage-1 }">上一页</a>
</c:if>
<c:choose>
<!--判断总页数是否小于10,如果小于10,begin=1,end=总页数-->
<c:when test="${pb.totalPages<=10 }">
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="${pb.totalPages }"></c:set>
</c:when>
<!--如果不小于10,则使用我们总结的分页计算公式来计算begin和end-->
<c:otherwise>
<c:set var="begin" value="${pb.currentPage-5}"></c:set>
<c:set var="end" value="${pb.currentPage+4 }"></c:set>
<!--如果begin(当前页数-5)<1,则将begin设置为1,end设置为10,要不然会出错-->
<c:if test="${begin<1}">
<c:set var="begin" value="1"></c:set>
<c:set var="end" value="10"></c:set>
</c:if>
<!--如果end(当前页数+4)>总页数,则将end设置为总页数,begin设置为end-9-->
<c:if test="${end>pb.totalPages}">
<c:set var="end" value="${pb.totalPages }"></c:set>
<c:set var="begin" value="${pb.totalPages-9 }"></c:set>
</c:if>
</c:otherwise>
</c:choose>
<!--从begin到end进行遍历即可显示页码列表-->
<c:forEach var="v" begin="${begin }" end="${end }">
<a href="${pb.url }¤tpage=${v }">${v}</a>
</c:forEach>
<c:if test="${pb.currentPage<pb.totalPages }">
<a href="${pb.url }¤tpage=${pb.currentPage+1 }">下一页</a>
</c:if>
<a href="${pb.url }¤tpage=${pb.totalPages}">尾页</a>
</center>
</body>
query.jsp
用来进行条件搜索的表单。
<body>
<h3 align="center">高级搜索</h3>
<form action="<c:url value='/CustomerServlet'/>" method="get">
<input type="hidden" name="m" value="query">
<table border="0" align="center" width="40%" style="margin-left: 100px;">
<tr>
<td width="100px">客户名称</td>
<td width="40%">
<input type="text" name="cname"/>
</td>
</tr>
<tr>
<td>客户性别</td>
<td>
<select name="gender">
<option value="">==请选择性别==</option>
<option value="男">男</option>
<option value="女">女</option>
</select>
</td>
</tr>
<tr>
<td>手机</td>
<td>
<input type="text" name="cellphone"/>
</td>
<td>
<label id="cellphoneError" class="error"> </label>
</td>
</tr>
<tr>
<td>邮箱</td>
<td>
<input type="text" name="email"/>
</td>
<td>
<label id="emailError" class="error"> </label>
</td>
</tr>
<tr>
<td> </td>
<td>
<input type="submit" value="搜索"/>
<input type="reset" value="重置"/>
</td>
<td> </td>
</tr>
</table>
</form>
</body>
edit.jsp
用来修改客户的表单。
修改客户要先获取客户以前的值,然后再修改提交。
<body>
<h3 align="center">编辑客户</h3>
<form action="<c:url value='/CustomerServlet'/>" method="post">
<input type="hidden" name="m" value="edit">
<input type="hidden" name="cid" value="${cst.cid }">
<table border="0" align="center" width="40%" style="margin-left: 100px;">
<tr>
<td width="100px">客户名称</td>
<td width="40%">
<input type="text" name="cname" value="${cst.cname }"/>
</td>
<td align="left">
<label id="cnameError" class="error"> </label>
</td>
</tr>
<tr>
<td>客户性别</td>
<td>
<input type="radio" name="gender" value="男" id="male" <c:if test="${cst.gender eq '男' }">checked="checked"</c:if> />
<label for="male">男</label>
<input type="radio" name="gender" value="女" id="female" <c:if test="${cst.gender eq '女' }">checked="checked"</c:if> />
<label for="female">女</label>
</td>
<td>
<label id="genderError" class="error"> </label>
</td>
</tr>
<tr>
<td>客户生日</td>
<td>
<input type="text" name="birthday" id="birthday" readonly="readonly" value="${cst.birthday }"/>
</td>
<td>
<label id="birthdayError" class="error"> </label>
</td>
</tr>
<tr>
<td>手机</td>
<td>
<input type="text" name="cellphone" value="${cst.cellphone }"/>
</td>
<td>
<label id="cellphoneError" class="error"> </label>
</td>
</tr>
<tr>
<td>邮箱</td>
<td>
<input type="text" name="email" value="${cst.email }"/>
</td>
<td>
<label id="emailError" class="error"> </label>
</td>
</tr>
<tr>
<td>描述</td>
<td>
<textarea rows="5" cols="30" name="description">${cst.description }</textarea>
</td>
<td>
<label id="descriptionError" class="error"> </label>
</td>
</tr>
<tr>
<td> </td>
<td>
<input type="button" value="编辑客户" onclick="add()"/>
<input type="reset" value="重置"/>
</td>
<td> </td>
</tr>
</table>
</form>
</body>
msg.jsp
用来显示成功信息的页面。
<body>
<h1 style="color:green;" align="center">恭喜,${msg }</h1>
</body>
第五步:在domain层创建PageBean和 Customer两个javaBean,用来封装数据
Customer.java 封装用户数据
public class Customer {
private String cid; //id
private String cname; //名字
private String gender; //性别
private String birthday; //生日
private String cellphone; //电话
private String email; //邮箱
private String description; //描述
public String getCellphone() {
return cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Customer [cid=" + cid + ", cname=" + cname + ", gender=" + gender + ", birthday=" + birthday
+ ", cellphone=" + cellphone + ", email=" + email + ", description=" + description + "]";
}
}
第六步:编写Servlet
我们的Servlet继承我们曾经写过的工具类,可以通过传递的参数来调用不同的方法。
public class CustomerServlet extends BaseServlet {
private CustomerService cs=new CustomerService(); //创建service层对象
//添加用户方法
public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//先获取表单提交的数据并将其封装成Customer对象
String name=request.getParameter("cname");
String gender=request.getParameter("gender");
String birthday=request.getParameter("birthday");
String phone=request.getParameter("cellphone");
String email=request.getParameter("email");
String description=request.getParameter("description");
Customer c=new Customer();
c.setCid(UUID.randomUUID().toString().replaceAll("-", ""));
c.setCname(name);
c.setBirthday(birthday);
c.setGender(gender);
c.setEmail(email);
c.setCellphone(phone);
c.setDescription(description);
//调用service层处理添加功能的业务逻辑
cs.add(c);
//如果添加成功,则将成功信息保存在request域,转发到显示信息的msg页面
request.setAttribute("msg", "恭喜,添加成功");
return "forward:/msg.jsp";
}
//查询所有数据的方法
public String findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//先获取传递的当前页码,设置每页最多显示多少数据
int currentpage=getCurrentpage(request);
int pagedata=10;
//调用service层的findAll方法,返回一个PageBean对象
PageBean<Customer> pb=cs.findAll(currentpage,pagedata);
//获取当前页面的URL,并设置,因为查询的条件我们要保存起来
pb.setUrl(getUrl(request));
//将pagebean对象放入request域中,转发到list页面
request.setAttribute("pb", pb);
return "forward:/list.jsp";
}
//获取页面url的方法
public String getUrl(HttpServletRequest request)
{
String contextpath=request.getContextPath();//获取项目名
String servletpath=request.getServletPath();//获取servlet路径
String querystring=request.getQueryString();//获取参数
//我们决定当前页码的参数由我们自己设置,所以如果我们点击的链接发送了该参数,我们需要将其去掉
if(querystring.contains("¤tpage="))
{
int index=querystring.indexOf("¤tpage=");
querystring=querystring.substring(0, index);
}
return contextpath+servletpath+"?"+querystring;
}
//获取提交的当前的页码,如果当前页码为null,则默认为第一页
public int getCurrentpage(HttpServletRequest request)
{
String currentpage=request.getParameter("currentpage");
if(currentpage==null) return 1;
return Integer.parseInt(currentpage);
}
//通过cid查询的方法
public String load(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Customer c=cs.load(request.getParameter("cid"));
request.setAttribute("cst", c);
return "forward:/edit.jsp";
}
//编辑的方法
public String edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//先获取表单提交的数据,封装在Customer对象中
String cid=request.getParameter("cid");
String name=request.getParameter("cname");
String gender=request.getParameter("gender");
String birthday=request.getParameter("birthday");
String phone=request.getParameter("cellphone");
String email=request.getParameter("email");
String description=request.getParameter("description");
Customer c=new Customer();
c.setCid(cid);
c.setCname(name);
c.setBirthday(birthday);
c.setGender(gender);
c.setEmail(email);
c.setCellphone(phone);
c.setDescription(description);
//调用service层的编辑方法
cs.edit(c);
//将成功信息保存在request域中,并转发到msg页面
request.setAttribute("msg", "恭喜,修改成功");
return "forward:/msg.jsp";
}
//删除功能
public String delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取cid,调用service层删除方法
cs.delete(request.getParameter("cid"));
//将成功信息保存在request域,并转发
request.setAttribute("msg", "删除成功");
return "forward:/msg.jsp";
}
//条件查询功能
public String query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//先获取表单提交的条件,全部封装在Customer对象中
String name=request.getParameter("cname");
String gender=request.getParameter("gender");
String phone=request.getParameter("cellphone");
String email=request.getParameter("email");
Customer c=new Customer();
c.setCname(name);
c.setGender(gender);
c.setEmail(email);
c.setCellphone(phone);
//获取页面的url,也就同时获取了查询条件
String url=getUrl(request);
//获取当前页码,设置每页最大显示数
int currentpage=getCurrentpage(request);
int pagedata=10;
//调用service层的条件查询方法,获取PageBean对象
PageBean<Customer> pb=cs.query(c,currentpage,pagedata);
//将url封装在pagebean对象中,并将pagebean对象保存在request域,转发到list页面
pb.setUrl(url);
request.setAttribute("pb", pb);
return "forward:/list.jsp";
}
}
第七步:编写service层方法
public class CustomerService {
//创建DAO层对象
private CustomerDao cd=new CustomerDao();
//添加用户方法,需要Customer对象参数,调用dao层完成数据操作
public void add(Customer c) {
cd.add(c);
}
//查询所有方法,需要当前页码,每页最大显示数
public PageBean<Customer> findAll(int currentpage,int pagedata) {
return cd.findAll(currentpage,pagedata);
}
//通过cid进行查询的方法
public Customer load(String cid)
{
return cd.finByCid(cid);
}
//编辑方法,需要Customer对象
public void edit(Customer c)
{
cd.edit(c);
}
//删除方法,需要cid
public void delete(String cid)
{
cd.delete(cid);
}
//条件查询方法,需要Customer对象(里面封装了条件),当前页码,页面最大显示数
public PageBean<Customer> query(Customer c,int currentpage,int pagedata)
{
return cd.query(c,currentpage,pagedata);
}
}
第八步,编写dao层方法对数据进行处理
public class CustomerDao {
//获取QueryRunner对象,是dbutils包提供,用来简化对数据库的操作
private QueryRunner qr=new QueryRunner(JdbcUtils.getDataSource());
//添加用户方法
public void add(Customer c)
{
try {
//设置sql模板和参数
String sql="insert into customer values(?,?,?,?,?,?,?)";
Object[] params= {c.getCid(),c.getCname(),c.getGender(),c.getBirthday(),c.getCellphone(),c.getEmail(),c.getDescription()};
//执行添加操作
qr.update(sql, params);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//查询所有的方法
public PageBean<Customer> findAll(int currentpage,int pagedata)
{
/*
* 1.创建pageBean对象,设置currentpage和pagedata
* 2.获取全部数据的数量totalData和当前页的数据
* 3.设置到pagebean对象中,返回
*/
try {
PageBean<Customer> pb=new PageBean<Customer>();
pb.setCurrentPage(currentpage);
pb.setPageData(pagedata);
//获取全部数据的数量
String sql="select count(*) from customer";
Number num=(Number) qr.query( sql, new ScalarHandler());
int totaldata=num.intValue();
pb.setTotalData(totaldata);
//获取当前页面的数据
sql="select * from customer limit ?,?";
List<Customer> beanlist=qr.query(sql, new BeanListHandler<Customer>(Customer.class), (currentpage-1)*pagedata,pagedata);
pb.setBeanList(beanlist);
//返回PageBean对象
return pb;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//用cid查找用户的方法
public Customer finByCid(String cid)
{
try {
String sql="select * from customer where cid=?";
return qr.query( sql, new BeanHandler<Customer>(Customer.class),cid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//编辑用户的方法
public void edit(Customer c)
{
try {
//设置sql模板和参数
String sql="update customer set cname=?,gender=?,birthday=?,cellphone=?,email=?,description=? where cid=?";
Object[] params={c.getCname(),c.getGender(),c.getBirthday(),c.getCellphone(),c.getEmail(),c.getDescription(),c.getCid()};
qr.update( sql, params);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//删除用户的方法
public void delete(String cid)
{
try {
String sql="delete from customer where cid=?";
qr.update( sql,cid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//条件查询的方法
public PageBean<Customer> query(Customer c,int currentpage,int pagedata)
{
/*
* 1.创建一个pagebean对象
* 2.设置传递过来的属性
* 3.获取全部数据的数量和当前页面的数据、
* 4.返回pagebean对象
*/
try {
PageBean <Customer> pb=new PageBean<Customer>();
pb.setCurrentPage(currentpage);
pb.setPageData(pagedata);
//获取全部数据的数量,因为我们呢的条件到后面查询数据时还要用到,所以我们将其分开
StringBuilder sql=new StringBuilder("select count(*) from customer");
StringBuilder wheresql=new StringBuilder(" where 1=1");
List<Object> params=new ArrayList<Object>();
//判断条件是否为null,不为空就将其加入到where的后面
if(c.getCname()!=null&&!c.getCname().trim().isEmpty())
{
wheresql.append(" and cname like ?");
params.add("%"+c.getCname()+"%");
}
if(c.getGender()!=null&&!c.getGender().trim().isEmpty())
{
wheresql.append(" and gender=?");
params.add(c.getGender());
}
if(c.getCellphone()!=null&&!c.getCellphone().trim().isEmpty())
{
wheresql.append(" and cellphone like ?");
params.add("%"+c.getCellphone()+"%");
}
if(c.getEmail()!=null&&!c.getEmail().trim().isEmpty())
{
wheresql.append(" and email like ?");
params.add("%"+c.getEmail()+"%");
}
Number num= (Number)qr.query( sql.append(wheresql).toString(), new ScalarHandler(),params.toArray());
int totaldata=num.intValue();
pb.setTotalData(totaldata);
//获取当前页面数据
StringBuilder selectsql=new StringBuilder("select * from customer");
StringBuilder limitsql=new StringBuilder(" limit ?,?");
//因为我们查询当前页面数据需要当前数据开始的位置,和查询几条数据两个参数,所以我们还需要设置两个参数
//设置当前数据开始的位置,(当前页码-1)*每页显示的数据,例如当前是第2页,就是从10开始
params.add((currentpage-1)*pagedata);
params.add(pagedata);
//获取当前页的数据
List<Customer> beanlist=qr.query(selectsql.append(wheresql).append(limitsql).toString(), new BeanListHandler<Customer>(Customer.class), params.toArray());
System.out.println(beanlist);
//将其数据集合设置到PageBean中,返回
pb.setBeanList(beanlist);
return pb;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}