实现商品评价(带分页)

1.效果图
在这里插入图片描述
2.数据库设计
在这里插入图片描述
在这里插入图片描述
3.封装商品评价VO

/**
 * 用来展示商品的评价数量的VO
 */
public class CommentLevelCountsVO {
    public Integer totalCounts;
    public Integer goodCounts;
    public Integer normalCounts;
    public Integer badCounts;
    省略get和set方法......
 }

4.自定义Mapper
ItemsMapperCustom

public interface ItemsMapperCustom{
    public List<ItemCommentVO> queryItemComments(@Param("paramsMap") Map<String,Object> map);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.lzx.mapper.ItemsMapperCustom" >
  <select id="queryItemComments" parameterType="Map" resultType="com.lzx.pojo.vo.ItemCommentVO">
  SELECT
  ic.`comment_level` AS commentLevel,
  ic.`content` AS content,
  ic.`sepc_name` AS sepcName,
  ic.`created_time` AS createdTime,
  u.`face` AS userFace,
  u.`nickname` AS nickname
  FROM
  items_comments ic
  LEFT JOIN
  users u
  ON
  ic.`user_id` = u.id
  WHERE
  ic.`item_id`= #{paramsMap.itemId}
  <if test=" paramsMap.level != null and paramsMap.level != '' ">
    AND ic.`comment_level`=#{paramsMap.level}
  </if>
  </select>
</mapper>

5.编写Service
ItemService


    /**
     * 根据商品id查询商品评价(分页)
     * @param itemId
     * @param level
     * @return
     */
    public PagedGridResult queryItemComments(String itemId, Integer level, Integer page, Integer pageSize);

6.编写Service实现类
PagedGridResult 是对分页结果的封装
DesensitizationUtil.commonDisplay()是对信息进行脱敏操作
在这里插入图片描述
上面两个工具这里可以找到得到
https://blog.csdn.net/Yearingforthefuture/article/details/106050945

 @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public PagedGridResult queryItemComments(String itemId, Integer level, Integer page,Integer pageSize) {
        Map<String,Object> map = new HashMap<>();
        map.put("itemId",itemId);
        map.put("level",level);
        PageHelper.startPage(page,pageSize);
        List<ItemCommentVO> lists = itemsMapperCustom.queryItemComments(map);
        for (ItemCommentVO list:lists) {
            list.setNickname(DesensitizationUtil.commonDisplay(list.getNickname()));
        }
        return setterPagedGrid(lists,page);
    }
    private PagedGridResult setterPagedGrid(List<?> list,Integer page){
        PageInfo<?> pageList = new PageInfo<>(list);
        PagedGridResult grid = new PagedGridResult();
        grid.setPage(page);
        grid.setRows(list);
        grid.setTotal(pageList.getPages());
        grid.setRecords(pageList.getTotal());
        return grid;
    }

7.编写Controller
ItemsController

@ApiOperation(value = "查询商品评价",notes = "查询商品评价",httpMethod = "GET")
    @GetMapping("/comments")
    public JSONResult comments(
            @ApiParam(name = "itemId",value ="商品Id",required = true)
            @RequestParam String itemId,
            @ApiParam(name = "level",value ="评价等级",required = false)
            @RequestParam Integer level,
            @ApiParam(name = "page",value ="页数",required = false)
            @RequestParam Integer page,
            @ApiParam(name = "pageSize",value ="一页显示的数量",required = false)
            @RequestParam Integer pageSize){
        if (StringUtils.isBlank(itemId)) {
            return JSONResult.errorMsg(null);
        }
        if (page ==  null) {
            page = 1;
        }
        if (pageSize == null) {
            pageSize = COMMENT_PAGE_SIZE ;
        }
        PagedGridResult result = itemService.queryItemComments(itemId, level, page, pageSize);

        return JSONResult.ok(result);
    }

8.部分前端代码

renderComments(itemId, level, page, pageSize) {

					var serverUrl = app.serverUrl;
					axios.defaults.withCredentials = true;
					axios.get(
							serverUrl + '/items/comments?itemId=' + itemId + "&level=" + level + "&page=" + page +
							"&pageSize=" + pageSize, {})
						.then(res => {
							if (res.data.status == 200) {
								var grid = res.data.data;
								var commentList = grid.rows;
								this.commentList = commentList;
								// console.log(commentList);

								for (var i = 0 ; i < commentList.length ; i ++) {
									var date = commentList[i].createdTime;
									var formatedTime = moment(date).format('YYYY年MM月DD日 h:mm:ss');
									// console.log(formatedTime);
									commentList[i].createdTime = formatedTime;
								}

								var maxPage = grid.total; // 获得总页数
								var total = grid.records; // 获得总记录数

								this.maxPage = maxPage;
								this.total = total;

							} else if (res.data.status == 500) {
								alert(res.data.msg);
							}
						});
				},
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值