企业WEB项目实现商品详情页面展示功能

概述

在开发电商项目时,我们需要实现一个最基本的功能:点击商品的图片,打开商品详情页面。其中,商品页面分为三大部分:

a) 商品基本信息

b) 延迟加载商品详情。延迟一秒加载使用ajax

c) 商品的规格参数。按需加载,当用户点击商品规格参数tab页,加载ajax。

1.功能分析

1、Taotao-portal接收页面请求,接收到商品id。

2、调用taotao-rest提供的商品详情的服务,把商品id作为参数传递给服务。接收到商品详细详细。

3、渲染结果,展示商品详细页面

4、为了提高响应速度,商品详情页的内容需要分步骤加载。

第一步:先展示商品基本信息,例如商品的名称、图片、价格。

第二步:展示商品的描述,此时商品页面已经展示完毕,需要ajax请求商品描述。展示的时机是页面加载完毕后一秒钟。

第三步:展示商品规格。当用户点击商品规格选项卡时展示。使用ajax请求商品规格。

5、在搜索页面点击商品的图片或者商品名称请求商品详情页面。

商品详情页请求的url:/item/{itemId}.html

商品描述请求的url:/item/desc/{itemId}.html

商品规格请求的url:/item/param/{itemId}.html

2.处理流程

img

3.taotao-rest服务发布

需要在taotao-rest工程中发布服务

1、取商品基本信息的服务

2、取商品描述的服务

3、取商品规格的服务

由于商品详情也是客户经常访问的,需要把商品信息添加到缓存中。Redis是内存数据库也属于稀缺资源,所以不应该永久占用,所以要设置过期时间。过期时间为一天。需要缓存同步。

3.1添加缓存逻辑

Redis的hash类型中的key是不能设置过期时间。如果还需要对key进行分类可以使用折中的方案。

Key的命名方式:XXXX:xxxx:~~~~

这样存放在redis中,当我们用可视化客户端时就会以文件夹形式存储

img

因此,在配置文件resource.properties添加url

#商品基本信息url
ITEM_INFO_URL=/item/info/
#商品描述url
ITEM_DESC_URL=/item/desc/
#商品规格参数url
ITEM_PARAM_URL=/item/param/

3.2Dao层

因为都是单表查询所以使用逆向工程生成的mapper文件即可。

tb_item

tb_item_desc

tb_item_param_item

3.3Service层

@Service
public class ItemServiceImpl implements ItemService {
   
	@Autowired
	private TbItemMapper itemMapper;
	@Autowired
	private TbItemDescMapper itemDescMapper;
	@Autowired
	private TbItemParamItemMapper itemParamItemMapper;
	@Value("${REDIS_ITEM_KEY}")
	private String REDIS_ITEM_KEY;
	@Value("${REDIS_ITEM_EXPIRE}")
	private Integer REDIS_ITEM_EXPIRE;
	@Autowired
	private JedisClientSingle jedisClientSingle;

	@Override
	public TaotaoResult getItemBaseInfo(long itemId) {
   
		//添加缓存逻辑
		try {
   
			//从缓存中取商品信息,商品id对应的信息
			String json = jedisClientSingle.get(REDIS_ITEM_KEY+":"+itemId+":base");
			if(!StringUtils.isBlank(json)) {
   
				//把json转换成java对象
				TbItem item = JsonUtils.jsonToPojo(json, TbItem.class);
				return TaotaoResult.ok(item);
			}
		} catch (Exception e) {
   
			e.printStackTrace();
		}
		//根据商品id查询商品信息
		TbItem item = itemMapper.selectByPrimaryKey(itemId);
		//把商品信息写入缓存
		try {
   
			jedisClientSingle.set(REDIS_ITEM_KEY+":"+itemId+":base", JsonUtils.objectToJson(item));
			//设置key的有效期
			jedisClientSingle.expire(REDIS_ITEM_KEY+":"+itemId+":base", REDIS_ITEM_EXPIRE);
		} catch (Exception e) {
   
			e.printStackTrace();
		}
		return TaotaoResult.ok(item);
	}

	@Override
	public TaotaoResult getItemDesc(long itemId) {
   
		//添加缓存
		try {
   
			//添加缓存逻辑
			//从缓存中取商品信息,商品id对应的信息
			String json = jedisClientSingle.get(REDIS_ITEM_KEY + ":" + itemId + ":desc");
			
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值