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);
}
});
},