(转)淘淘商城系列——商品搜索功能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层代码便写完了。
(转)淘淘商城系列——商品搜索功能Dao实现的更多相关文章
- (转)淘淘商城系列——商品搜索功能Service实现
http://blog.csdn.net/column/details/15737.html 首先我们在taotao-search-interface工程中新建一个SearchService接口,并在 ...
- 后台商品搜索功能开发SQL
在做后台的商品搜索功能开发时遇到了一些问题记录下来 版本一 <select id="SelectByNameAndParentId resultMap="Base_resul ...
- PHPCMS快速建站系列之搜索功能
默认模板的搜索功能代码 <div class="bd"> <form action="{APP_PATH}index.php" method= ...
- 分布式网上商城项目-solr搜索功能错误
1.RuntimeException错误 java.lang.RuntimeException: org.apache.ibatis.binding.BindingException: Invalid ...
- (转)淘淘商城系列——中文分析器IK-Analyzer的使用
在Solr中默认是没有中文分析器的,需要手工配置,配置一个FieldType,在FieldType中指定使用的中文分析器.另外,Solr中的字段(即业务域)必须先定义后使用.下面我们先把中文分析器配好 ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第八天】(solr服务器搭建、搜索功能实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第九天】(商品详情页面实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
- 商城06——solr索引库搭建&solr搜索功能实现&图片显示问题解决
1. 课程计划 1.搜索工程的搭建 2.linux下solr服务的搭建 3.Solrj使用测试 4.把数据库中的数据导入索引库 5.搜索功能的实现 2. 搜索工程搭建 要实现搜索功能,需要搭建 ...
- 【PHP开源产品】Ecshop的商品筛选功能实现分析之一
一.首先,说明一下为什么要对category.php文件进行分析. 原因如下: ①个人对商城类商品筛选功能的实现比较好奇: ②对商城中关于商品的数据表设计比较感兴趣.(该功能涉及到与数据库的交互,而且 ...
随机推荐
- IDM百度云使用
2018-8-6 (idm百度云速度很慢) Tips:如果感觉图片较小,可以ctrl+鼠标滚轮放大网页 首先下载IDM绿色版. 解压后:右键以管理员权限运行进行绿化 最后,它会在所有支持的浏览器上安装 ...
- Windows网络编程:winsock文件传输范例
基于TCP流协议的winsock网络文件传输Demo: 实现:C语言 功能:文件传输(可以传任何格式的文件) /******************************************** ...
- Appium、selenium与Robot Framework
Robot Framework + Appium Appium-Python-Client: 与Appium Library和Appium Server的交互Appium Library通过Appii ...
- java中关于'&&'、'||'混合运算优先级问题小结
package com.per.sdg.operator; /** * 结论:先进行'&&'运算,在进行'||'运算 * @author sundg * */ public class ...
- android的toogleButton和switch的使用方法
这两个是button开关.监听CheckedChangeListener toggle_layout.xml: <? xml version="1.0" encoding=& ...
- C++ - RTTI(RunTime Type Information)执行时类型信息 具体解释
RTTI(RunTime Type Information)执行时类型信息 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details ...
- java后台修改ZK页面的title
Clients.evalJavaScript("document.title='"+basicDBObject.getString("systemName")+ ...
- vs2017 + miniUI 后端框架使用
vs2017 + miniUI 后端框架使用 上miniUI官网直接下载框架.http://www.miniui.com/ 此框架使用说明很清楚. 2.1.vs2017创建安装miniUI后端框架 ...
- OAuth2.0最简向导
无论你是否有技术背景,你都能看懂授权协议框架OAuth2.0 翻译来自:川崎高彦对自己投资人讲解自己的SaaS安全产品. Got it! https://medium.com/@darutk/the- ...
- vue中sync,v-model----双向数据绑定
需求:父子组件同步数据 实现方式:sync或者v-model 一.sync 官网:https://cn.vuejs.org/v2/guide/components-custom-events.html ...