淘淘商城第九天笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淘淘商城第九天1第八天内容回顾
1、搜索系统的实现
a)发布搜索服务,pc、移动端都可以调用。
b)在portal中调用服务,实现搜索功能。
2、Solr提供的搜索服务。
a)Solr的集群
b)Solr集群的使用。
c)单机版使用HttpSolrServer。
d)集群版使用CloudSolrServer。
2课程计划
1、商品详情页面的展示
a)伪静态化(使用jsp动态展示)
b)添加缓存,redis
2、网页静态化freemaker+nginx
3商品详情页面展示
3.1 分析
在搜索结果中点击商品图片或者title打开商品详情页面。
在Controller中从url中把商品id取出来,根据商品id查询对应的商品详细信息。
商品信息应该是调用服务来获得。需要在taotao-rest中发布服务。
Taotao-rest服务中根据商品id查询商品信息。
需要用到的表:
商品表:tb_item
商品详细信息:tb_item_desc
商品的规格参数:tb_item_param_item
应该发布三个服务:商品基本信息、取商品详情、取商品的规格参数。
3.2 发布服务
3.2.1商品基本信息服务
根据商品id取数据。商品表:tb_item
3.2.1.1 D ao层
使用逆向工程
3.2.1.2 S ervice层
接收商品id,根据商品id查询商品基本信息。返回商品基本信息的pojo——TbItem。
为了减轻数据库的压力,需要添加缓存。由于商品数据比较多,需要把用户访问的数据添加缓存中,同时需要设置商品数据的过期时间,根据时间情况调整,需要把过期时间放到配置文件中。
要设置过期时间redis中只能在key上设置。
使用String数据类型,为了便于分组可以使用“:”分隔的命名方式。
REDIS_ITEM:BASE_INFO:{ITEM_ID}
@Service
publicclass ItemServiceImpl implements ItemService {
@Autowired
private TbItemMapper itemMapper;
@Autowired
private JedisClient jedisClient;
@Value("${REDIS_ITEM_KEY}")
private String REDIS_ITEM_KEY;
@Value("${ITEM_BASE_INFO_KEY}")
private String ITEM_BASE_INFO_KEY;
@Value("${ITEM_EXPIRE_SECOND}")
private Integer ITEM_EXPIRE_SECOND;
@Override
public TbItem getItemById(Long itemId) {
//查询缓存,如果有缓存,直接返回
try {
String json= jedisClient.get(REDIS_ITEM_KEY+ ":"+ ITEM_BASE_INFO_KEY + ":"+ itemId);
//判断数据是否存在
if (StringUtils.isNotBlank(json)) {
// 把json数据转换成java对象
TbItem item = JsonUtils.jsonToPojo(json, TbItem.class);
return item;
}
} catch (Exception e) {
e.printStackTrace();
}
//根据商品id查询商品基本信息
TbItem item = itemMapper.selectByPrimaryKey(itemId);
//向redis中添加缓存。
//添加缓存原则是不能影响正常的业务逻辑
try {
//向redis中添加缓存
jedisClient.set(REDIS_ITEM_KEY + ":" + ITEM_BASE_INFO_KEY + ":" + itemId
, JsonUtils.objectToJson(item));
//设置key的过期时间
jedisClient.expire(REDIS_ITEM_KEY + ":" + ITEM_BASE_INFO_KEY + ":" + itemId,
ITEM_EXPIRE_SECOND);
} catch (Exception e) {
e.printStackTrace();
}
return item;
}
}
3.2.1.3 C ontroller
接收商品id,根据商品id查询商品基本信息,调用Service查询。直接响应json数据。返回结果:使用TaotaoResult包装TbItem对象。
请求的url:/rest/item/base/{itemId}
@Controller
@RequestMapping("/item")
publicclass ItemController {
@Autowired
private ItemService itemService;
/**
* 查询商品基本信息
*
Title: getItemById
*
Description:
* @param itemId
* @return
*/
@RequestMapping("/base/{itemId}")
@ResponseBody
public TaotaoResult getItemById(@PathVariable Long itemId) {
try {
TbItem item = itemService.getItemById(itemId);
return TaotaoResult.ok(item);
} catch (Exception e) {
e.printStackTrace();
return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
}
}
}
3.2.2商品详情信息查询服务
根据商品id查询商品详情。tb_item_desc
3.2.2.1 D ao层
可以使用逆向工程