推荐商品功能实现

本文介绍了一种利用MyBatis实现懒加载的技术,通过自定义Mapper接口和SQL语句,结合懒加载特性,有效地提高了大型电商网站中商品信息的加载效率。具体包括数据库表设计、VO类创建、自定义Mapper接口定义、SQL语句编写、Service及其实现类编写、Controller处理以及前端设计等步骤。
摘要由CSDN通过智能技术生成

1.直接上图看效果
在这里插入图片描述
2.数据库表的设计
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.创建基础数据类VO
NewItemsVO

public class NewItemsVO {
    private Integer rootCatId;
    private String rootCatName;
    private String slogan;
    private String catImage;
    private String bgColor;
    private List<SimpleItemVO> simpleItemList;
    省略get和set方法......
}

SimpleItemVO

public class SimpleItemVO {
    private String itemId;
    private String itemName;
    private String itemUrl;
  }

4.创建自定义Mapper
CategoryMapperCustom
注意注解,指定传入的参数paramsMap
通过paramsMap.key可以得到相应的vaue

public interface CategoryMapperCustom {
    public List<NewItemsVO> getSixNewItemsLazy(@Param("paramsMap") Map<String,Object> map);
}

5.编写sql语句(CategoryMapperCustom.xml)

<resultMap id="myNewItemsVO"  type="com.lzx.pojo.vo.NewItemsVO">
        <id column="rootCatId" property="rootCatId" />
        <result column="rootCatName" property="rootCatName"/>
        <result column="slogan" property="slogan" />
        <result column="catImage" property="catImage" />
        <result column="bgColor" property="bgColor" />

        <collection property="simpleItemList" ofType="com.lzx.pojo.vo.SimpleItemVO">
            <id column="itemId" property="itemId" />
            <result column="itemName" property="itemName"/>
            <result column="itemUrl" property="itemUrl" />
        </collection>
    </resultMap>
    <select id="getSixNewItemsLazy" resultMap="myNewItemsVO" parameterType="Map">
        SELECT
          f.`id` AS rootCatId,
          f.`name` AS rootCatName,
          f.`slogan`AS slogan,
          f.`cat_image` AS catImage,
          f.`bg_color`AS bgColor,
          i.`id` AS itemId,
          i.`item_name`AS itemName,
          ii.`url`AS itemUrl,
          ii.`created_time`AS createdTime
        FROM
          category f
        LEFT JOIN items i ON f.`id` = i.`root_cat_id`
        LEFT JOIN items_img ii ON i.`id` = ii.`item_id`
        WHERE
          f.`type` = 1
        AND
          i.`root_cat_id` =#{paramsMap.rootCatId}
        AND
          ii.`is_main`=1
        ORDER BY
          i.`created_time`
        DESC
        LIMIT 0,6
    </select>

6.编写Service
CategoryService

/**
 * 查询一级分类下的六条商品信息
 * @param rootCatId
 * @return
 */
public List<NewItemsVO> getSixNewItemsLazy(Integer rootCatId);

7.编写Sevice实现类
CategoryServiceImpl

@Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public List<NewItemsVO> getSixNewItemsLazy(Integer rootCatId) {
        Map<String,Object> map =  new HashMap<>();
        map.put("rootCatId",rootCatId);
        return categoryMapperCustom.getSixNewItemsLazy(map);
    }

8.编写Controller
IndexController

@ApiOperation(value = "获取一级分类的六个商品",notes = "获取一级分类的六个商品",httpMethod = "GET")
    @GetMapping("/sixNewItems/{rootCatId}")
    public JSONResult sixNewItems(
            @ApiParam(name = "rootCatId",value ="一级分类Id",required = true)
            @PathVariable Integer rootCatId){
        if (rootCatId == null) {
            return JSONResult.errorMsg("分类不存在");
        }
        List<NewItemsVO> list = categoryService.getSixNewItemsLazy(rootCatId);
        return JSONResult.ok(list);
    }

9.前端设计
部分代码

renderSixNewItems() {
					var serverUrl = app.serverUrl;
					var categoryList = this.categoryList;
					var catIndex = this.catIndex;
					
					var rootCat = categoryList[catIndex];
					if (rootCat == undefined || rootCat == null || rootCat == '') {
						return;
					}
					var rootCatId = rootCat.id;

					catIndex++;
					this.catIndex = catIndex;

					// 获得各个分类下的最新6个商品
					axios.get(
							serverUrl + '/index/sixNewItems/' + rootCatId, {})
						.then(res => {
							if (res.data.status == 200) {
								var sixNewItemsListTemp = res.data.data
								var sixNewItemsList = this.sixNewItemsList;
								sixNewItemsList.push(sixNewItemsListTemp[0]);
								this.sixNewItemsList = sixNewItemsList;
								// console.log(sixNewItemsList);
								this.isScrolling = false;	// 加载完毕以后表示下次可以继续滚动加载
							}
						});
				},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值