淘淘商城系列——商品搜索功能Dao实现
来源:互联网 发布:linux 批量删除文件名 编辑:程序博客网 时间:2024/05/16 14:49
终于进入商品搜索功能的开发中了,本文我来教大家编写实现商品搜索功能的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 */@Repositorypublic 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; }}
在上面的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层代码便写完了。
- 淘淘商城系列——商品搜索功能Dao实现
- 淘淘商城系列——商品搜索功能Service实现
- 淘淘商城系列——商品搜索功能测试
- 淘淘商城系列——商品搜索功能表现层实现
- 淘淘商城系列——实现添加商品功能
- 淘淘商城系列——商品类目选择的实现
- 淘淘商城系列——实现商品详情页面展示
- 淘淘商城系列——搜索功能切换到集群
- 淘淘商城系列——导入商品数据到索引库——dao层
- 淘淘商城系列——实现图片上传功能
- 淘淘商城之商品添加功能实现
- 淘淘商城系列——展示购物车商品列表
- 淘淘商城系列——修改购物车商品数量
- 学习淘淘商城第四十八课(商品搜索功能Controller实现)
- 淘淘商城系列——搜索服务搭建
- 淘淘商城系列——搜索系统搭建
- 淘淘商城系列——首页跳转到搜索页面
- 淘淘商城系列(七)后台商品添加实现
- SourceTree安装教程和GitLab配置详解
- 199.m1-ListView的优化
- linux ip配置
- MyEclipse添加自己安装的Maven
- 开发几大原则理解(单一原则)
- 淘淘商城系列——商品搜索功能Dao实现
- 200.m1-优化抽取Adapter一之抽取BaseAdapter
- 汇编语言中常用的指令
- 学习7:ROS话题,ROS服务,ROS参数
- jquery.parser源码解析
- 汇编语言 寄存器、英文缩写全称
- 2-struts2入门-action
- 开源单元测试工具汇总
- js作用域安全的构造函数