• (转)淘淘商城系列——商品搜索功能Dao实现


    http://blog.csdn.net/yerenyuan_pku/article/details/72909286

    终于进入商品搜索功能的开发中了,本文我来教大家编写实现商品搜索功能的Dao层代码。 
    我们现在是在开发商品搜索功能,访问索引库也就是数据访问,那么Dao层应该使用什么来访问呢?使用SolrServer对象就可以了,甚至Dao层我们也可以再封装一下,封装一个通用的数据访问方法,用户给我们一个SolrQuery对象,这个对象怎么来的我们不管,只要用户给我们把这个对象拼装好就行,拼装好了之后,我们就根据SolrQuery对象进行查询,把用户想要的结果返回,返回一个SearchResult对象就行了。 
    在实际开发中编写Dao层一般都是要有接口和实现类的,但这儿没必要建接口了,因为不存在不同的实现类,所以我们在taotao-search-service工程中新建一个com.taotao.search.dao包,并在该包下新建一个ItemSearchDao类,如下图所示。 

    为了大家方便复制,现将ItemSearchDao类的代码贴出。

    /**
     * 商品搜索dao
     * <p>Title: ItemSearchDao</p>
     * <p>Description: </p>
     * <p>Company: www.itcast.cn</p> 
     * @version 1.0
     */
    @Repository
    public class ItemSearchDao {
    
        @Autowired
        private SolrServer solrServer;
    
        public SearchResult search(SolrQuery query) throws Exception {
            // 根据SolrQuery对象查询索引库
            QueryResponse response = solrServer.query(query);
            // 取查询结果
            SolrDocumentList solrDocumentList = response.getResults();
            SearchResult result = new SearchResult();
            // 取查询结果总记录数
            result.setTotalNumber(solrDocumentList.getNumFound());
            // 取结果集
            List<SearchItem> itemList = new ArrayList<SearchItem>();
            for (SolrDocument solrDocument : solrDocumentList) {
                SearchItem searchItem = new SearchItem();
                searchItem.setCategory_name((String) solrDocument.get("item_category_name"));
                searchItem.setId(Long.parseLong(solrDocument.get("id").toString()));
                searchItem.setImage((String) solrDocument.get("item_image"));
                // 标题取高亮显示
                String itemTitle = null;
                Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
                List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
                if (list != null && list.size() > 0) {
                    itemTitle = list.get(0);
                } else {
                    itemTitle = (String) solrDocument.get("item_title");
                }
                searchItem.setPrice((Long) solrDocument.get("item_price"));
                searchItem.setTitle(itemTitle);
                // 添加到商品列表
                itemList.add(searchItem);
            }
            result.setItemList(itemList);
            // 返回结果
            return result;
        }
    }
    • 1

    在上面的ItemSearchDao类中使用注解的方式注入SolrServer,能不能注入成功呢?答案是不行的,因为我们在taotao-search-service的applicationContext-service.xml配置文件中配置的扫描包的范围是com.taotao.search.service,而com.taotao.search.dao不在这个范围内,从而无法将com.taotao.search.dao这个包下的类扫描到spring容器当中,当然我们就无法注入成功了。解决方法有两种,第一种是把扫描包的范围扩大,由原来的com.taotao.search.service改为com.taotao.search,这样com.taotao.search.dao和com.taotao.search.service两个包就都可以被扫描进spring容器当中了。第二种方法是在已有的扫描包后面再加一个扫描范围com.taotao.search.dao,中间以”,”分隔,就像base-package="com.taotao.search.service,com.taotao.search.dao"这样。 

    这样,实现商品搜索功能的Dao层代码便写完了。

  • 相关阅读:
    金融期货期权
    悲剧论——情感净化
    麻将
    后现代postmodern
    AlphaGo
    上帝已死——尼采
    牛顿迭代法
    浏览器访问homestead,由http自动转换为https
    Laravel框架原理(一)--Laravel中常用的PHP语法
    Android面试宝典(1)----android的基础知识
  • 原文地址:https://www.cnblogs.com/telwanggs/p/6962430.html
Copyright © 2020-2023  润新知