前言:
该篇代码比较多,光看起来会比较枯燥。先自己了解session版本购物车的思路,尝试自己
独自去完成,之后以本篇作为参考来完成任务。效果会比较好,如果有错误的地方谢谢指出!
目录
一、回顾
用三层架构思想书写代码,规范代码。
二、分页
分页是网页中最常见的部分。能发现规律,当前该页显示第n~m条数据根据当前页数和每页显示几
条来决定。直接上代码!
实现代码:
index.jsp
<%
//实例化商品(Goods)逻辑业务层
IGoodsBiz igb=new GoodsBiz();
//初始化当前页数为1
int pages=1;
//获取点击下一页之后的页数
String pages2=request.getParameter("pages");
if(pages2!=null){
pages=Integer.parseInt(pages2);
}
//初始化页面大小(一页显示几条数据)
int size=3;
//由规律可得第几页显示第n~m条数据
int begin=(pages-1)*size+1;
int end=pages*size;
//调用方法读取一个几条数据
int count=igb.getCount();
//计算出最大页数
int max=(int)Math.ceil((count*1.0)/size);
//分页查询
List<Goods> li=igb.getAll(begin,end);
if(li!=null){
for(Goods g:li){
%>
<tr>
<td><%=g.getGid() %></td>
<td><%=g.getGname() %></td>
<td><%=g.getGprice() %></td>
<td><%=g.getGinfo() %></td>
<td><img src="<%=g.getGpath() %>"></td>
<td><a href='addcar.jsp?gid=<%=g.getGid()%>'>添加到购物车</a></td>
</tr>
<%
}
}
%>
</table>
<!--三元运算符来判断带过去的参数pages(页数)为几 -->
<a href='index.jsp?pages=<%=pages==1?1:pages-1 %>'>上一页</a>
当前页数:<%=pages %>总页数:<%=max %>
<a href='index.jsp?pages=<%=pages==max?max:pages+1 %>'>下一页</a>
GoodsBiz.java
public class GoodsBiz implements IGoodsBiz{
IGoodsDao igd=new GoodsDao();
//分页查询数据
public List<Goods> getAll(int begin,int end) {
return igd.getAll(begin,end);
}
//查出数据总条数
public int getCount() {
return igd.getCount();
}
}
GoodsDao.java
public class GoodsDao implements IGoodsDao{
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
private String sql;
/**
* @param begin 当前页数开始
* @param end 当前页数结束
* @return 第begin-end条的商品
*/
public List<Goods> getAll(int begin,int end) {
con=DBHelper.getCon();
//这里是Oracle的SQL语句,所以使用了伪列rownum和子查询
//原理都是一样,查询begin-end的数据
sql="select * from(select g.*,rownum r from goods g)n where n.r between ? and ?";
List<Goods> li=new ArrayList<Goods>();
try {
ps=con.prepareStatement(sql);
ps.setInt(1, begin);