📚目录
- 订单接口api
- 需求
- 问题
- 解决 Map<String,TaobaoOrder>
订单接口api
可自行查询官网文档,点击进入
需求
通过接口中
has_next
标识判断该时间断是否还有下一页数据,直到该值数据为false时,表面该时间范围内的订单数据获取完成.
拉取完成后需要对数据库中订单状态进行更新或者新增订单信息到数据库中,我们可以通过trade_id
子订单号唯一去查询数据库已经存在的订单返回,数据库返回的格式 Map<String,TaobaoOrder>
key为trade_id
,value为TaobaoOrder数据库表实体类对象
,这样我们就可以通过Map的containsKey
方法判断是否存在,如果不存在则需要进行新增,反之修改订单状态
代码示例图
问题
Mapper返回的数据结构是
Map<String,TaobaoOrder>
,返回的结果却是Map<String,HashMap>
按照上面的思路,查询数据库返回Map<String,TaobaoOrder>
对象时,需要注意在Mapper接口上添加@MapKey
注解值的需要填写正确.如果创建的xml返回值是resultType="java.util.Map"
并没有声明resultMap
,那么@MapKey
的值必须时数据库的字段.
Mapper接口定义:
xml代码:
运行效果:
解决 Map<String,TaobaoOrder>
可以看出通过上面配置的拿到的返回值和我们预期的对象不一致.这个时候就需要在xml的方法上添加resultMap
TaobaoOrderResult:
resultMap: 简单理解就是把数据库字段转成实体类对象的属性.
property:是实体类属性
column:是数据库的字段
举个例子:这里把数据库的trade_id
值设置到实体类tradeId
中
<resultMap type="com.itmei.platformsyncasyn.domain.TaobaoOrder" id="TaobaoOrderResult"><result property="refundTag" column="refund_tag" /><result property="itemImg" column="item_img" /><result property="itemTitle" column="item_title" /><result property="itemNum" column="item_num" /><result property="itemPrice" column="item_price" /><result property="itemLink" column="item_link" /><result property="itemId" column="item_id" /><result property="tradeId" column="trade_id" /><result property="tradeParentId" column="trade_parent_id" /></resultMap>
然后修改Mapper接口中的@MapKey("trade_id")
为@MapKey("tradeId")
运行效果:
可以看出返回结果已经从Map<String,HashMap>
变成我们Map<String,TaobaoOrder>
对应的数据结构了.这样我们就可以直接通过订单id获取到对应的TaobaoOrder对象,就不需要单独在用订单id去查询一遍库,判断状态是什么值时对订单做对应的处理了.