【Spring+Mybatis+SpringMVC整合项目七】天猫商城(前台-搜索)

 

【Spring+Mybatis+SpringMVC整合项目七】天猫商城(前台-搜索)_第1张图片

search.jsp

 通过search.jsp或者simpleSearch.jsp提交数据到路径 /foresearch, 导致ForeController.search()方法被调用
1. 获取参数keyword
2. 根据keyword进行模糊查询,获取满足条件的前20个产品
3. 为这些产品设置销量和评价数量
4. 把产品结合设置在model的"ps"属性上
5. 服务端跳转到 searchResult.jsp 页面

@RequestMapping("foresearch")
    public String search( String keyword,Model model){
 
        PageHelper.offsetPage(0,20);
        List ps= productService.search(keyword);
        productService.setSaleAndReviewNumber(ps);
        model.addAttribute("ps",ps);
        return "fore/searchResult";
    }
}

其中,有productService提供的search方法和setSaleAndReviewNumber方法

这两个方法的实现如下

首先修改ProductService,增加search方法

package com.how2java.tmall.service;
 
import java.util.List;
 
import com.how2java.tmall.pojo.Category;
import com.how2java.tmall.pojo.Product;
 
public interface ProductService {
    void add(Product p);
    void delete(int id);
    void update(Product p);
    Product get(int id);
    List list(int cid);
    void setFirstProductImage(Product p);
 
    void fill(List cs);
 
    void fill(Category c);
 
    void fillByRow(List cs);
 
    void setSaleAndReviewNumber(Product p);
 
    void setSaleAndReviewNumber(List ps);
 
    List search(String keyword);
}

修改ProductServiceImpl实现search方法,通过关键字进行模糊查询

@Override
    public List search(String keyword) {
        ProductExample example = new ProductExample();
        example.createCriteria().andNameLike("%" + keyword + "%");
        example.setOrderByClause("id desc");
        List result = productMapper.selectByExample(example);
        setFirstProductImage(result);
        setCategory(result);
        return result;
    }

再来时setSaleAndReviewNumber的方法,为商品附上评论和销量信息

@Override
    public void setSaleAndReviewNumber(Product p) {
        int saleCount = orderItemService.getSaleCount(p.getId());
        p.setSaleCount(saleCount);
 
        int reviewCount = reviewService.getCount(p.getId());
        p.setReviewCount(reviewCount);
    }
 
    @Override
    public void setSaleAndReviewNumber(List ps) {
        for (Product p : ps) {
            setSaleAndReviewNumber(p);
        }
    }

最后,把查询出来的结果放到searchResult.jsp上显示

代码片段

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
     
¥ ${fn:substring(p.name, 0, 50)} 天猫专卖
月成交 ${p.saleCount}笔 评价${p.reviewCount}
没有满足条件的产品

到这里,搜索的功能大致上就算完成了

你可能感兴趣的:(项目)