苍穹外卖day11销量TOP10商品展示,前端有商品名字但无销量(已解决)
在开发销量TOP10商品展示这一功能时,前端有商品名字但无销量。
我初步怀疑是mapper层存在bug,我的OrderDetailMapper.xml代码如下:
java
<?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.sky.mapper.OrderDetailMapper">
<!--获取销量TOP10的商品-->
<select id="getTop10Sales" resultType="com.sky.dto.GoodsSalesDTO">
select od.name, sum(od.number) as sale
from order_detail od, orders o
where od.order_id=o.id and o.status=5 and o.order_time between #{begin} and #{end}
group by od.name
order by sale desc
limit 10
</select>
</mapper>
我怀疑可能是销量没有封装到GoodsSalesDTO中才导致前端不显示商品销量。
我的GoodsSalesDTO代码如下:
java
package com.sky.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class GoodsSalesDTO implements Serializable {
// 商品名称
private String name;
// 销量
private Integer number;
}
终于找到了bug!od.number字段别名sale和DTO属性名number不一致,导致MyBatis无法正确将销量封装到DTO中。
修改OrderDetailMapper.xml代码如下:
java
<?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.sky.mapper.OrderDetailMapper">
<!--获取销量TOP10的商品-->
<select id="getTop10Sales" resultType="com.sky.dto.GoodsSalesDTO">
# Caution: 此处sum(od.number)的别名必须是number,否则无法封装到GoodsSalesDTO中
select od.name, sum(od.number) as number
from order_detail od, orders o
where od.order_id=o.id and o.status=5 and o.order_time between #{begin} and #{end}
group by od.name
order by number desc
limit 10
</select>
</mapper>
启示 :
表字段别名必须和待封装对象的属性名保持一致,MyBatis才能够正确封装!