您的位置:首页 > 编程语言 > Java开发

JAVA WEB从入门到精通 day20 分页技术&小项目:客户管理系统

2017-04-07 13:48 519 查看

分页

什么是分页?

我们用网站查询信息时,经常会看到

第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);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java web
相关文章推荐