javaWeb实战教程
7.商品模块的开发
商品模块分为商品列表和商品详细两个页面,其中商品列表可以按照商品分类筛选,还可以按照多种方法排序;商品详细除了有这个商品的信息外,还推荐了几个商品。
根据数据库新建Product.java:
public class Product {
private int id;
private String name;
private String des;
private double price;
private double oldprice;
private int stock;
private String pic1;
private String pic2;
private String pic3;
private String pic4;
private String txt;
private int click;
private int rank;
private int claszId;
}
其中click是商品的点击量,点击量越高说明人气越高;rank是商品的排序等级,rank越高排序越靠前;claszId是外键clasz的主键id。
7.1 商品列表页面
商品列表页面是通过页头的分类点击进来的,所以商品列表按照分类进行筛选;其次商品列表根据综合排序、价格、人气、上架时间进行排序;商品列表还带分页功能,可以显示一共有多少条数据。
根据这些需求,我们一步步来编码实现。
7.1.1 dao的实现
新建ProductDao.java,在里面写上方法:
public List<Product> getListByClaszId(int claszId, String orderby, boolean isDesc, int page, int max)
public int getListCountByClaszId(int claszId)
getListByClaszId是根据clasz的id,按照orderby进行排序的方法,这涉及到sql语句的拼接:
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("select * from Product ");
if (claszId > 0)
sqlBuffer.append(" where claszId=? ");
sqlBuffer.append(" order by ");
sqlBuffer.append(orderby);
if (isDesc)
sqlBuffer.append(" desc");
sqlBuffer.append(" limit ?,?");
最后发起查询:
Object[] params = null;
if (claszId > 0) {
params = new Object[] { claszId, (page - 1) * max, max };
} else {
params = new Object[] { (page - 1) * max, max };
}
return new QueryRunner().query(connection, sqlBuffer.toString(),
new BeanListHandler<>(Product.class), params);
getListCountByClaszId方法是根据clasz的id来查询商品总数:
public int getListCountByClaszId(int claszId) throws SQLException {
return new QueryRunner().query(connection,
"select count(*) from product where claszId=?",
new ScalarHandler<Long>(), claszId).intValue();
}
7.1.2 service的实现
这里并没有什么义务逻辑,主要是数据库查询,直接调用productDao: