70. 购物车-显示列表-持久层
(a) 规划所需要执行的SQL语句
显示购物车列表时,只会显示当前登录的用户的购物车数据,需要执行的SQL语句大致是:
select
cid, uid, pid, t_cart.num, t_cart.price,
title, t_product.price AS realPrice, image
from
t_cart
left join
t_product
on
t_cart.pid=t_product.id
where
uid=?
order by
t_cart.created_time desc
(b) 接口与抽象方法
在cn.tedu.store
包中创建子级的vo
包,并在这个包中创建CartVO
类:
public class CartVO implements Serializable {
private Integer cid;
private Integer uid;
private Integer pid;
private Integer num;
private String title;
private String image;
private Long price;
private Long realPrice;
// SET/GET/基于cid的hashCode和equals/toString
}
在CartMapper
中添加:
List<CartVO> findVOByUid(Integer uid);
(c) 配置映射
映射:
<!-- 查询某用户的购物车数据的列表 -->
<!-- List<CartVO> findVOByUid(Integer uid) -->
<select id="findVOByUid"
resultType="cn.tedu.store.vo.CartVO">
SELECT
cid, uid,
pid, t_cart.num,
t_cart.price, title,
image, t_product.price AS realPrice
FROM
t_cart
LEFT JOIN
t_product
ON
t_cart.pid=t_product.id
WHERE
uid=#{uid}
ORDER BY
t_cart.created_time DESC
</select>
测试:
@Test
public void findVOByUid() {
Integer uid = 18;
List<CartVO> list = mapper.findVOByUid(uid);
System.err.println("count=" + list.size());
for (CartVO item : list) {
System.err.println(item);
}
}
71. 购物车-显示列表-业务层
(a) 规划可能出现的异常
无
(b) 业务接口及抽象方法
/**
* 查询某用户的购物车数据的列表
* @param uid 用户id
* @return 该用户的购物车数据的列表
*/
List<CartVO> getVOByUid(Integer uid);
(c) 实现抽象方法
代码:
/**
* 查询某用户的购物车数据的列表
* @param uid 用户id
* @return 该用户的购物车数据的列表
*/
private List<CartVO> findVOByUid(Integer uid) {
return cartMapper.findVOByUid(uid);
}
@Override
public List<CartVO> getVOByUid(Integer uid) {
return findVOByUid(uid);
}
测试:
@Test
public void getVOByUid() {
Integer uid = 18;
List<CartVO> list = service.getVOByUid(uid);
System.err.println("count=" + list.size());
for (CartVO item : list) {
System.err.println(item);
}
}
72. 购物车-显示列表-控制器层
(a) 处理新创建的异常
无
(b) 设计所需要处理的请求
请求路径:/carts/
请求参数:HttpSession session
请求方式:GET
响应结果:JsonResult<List<CartVO>>
(c) 处理请求
// http://localhost:8080/carts/
@GetMapping("")
public JsonResult<List<CartVO>> getVOByUid(HttpSession session) {
Integer uid = getUidFromSession(session);
List<CartVO> data = cartService.getVOByUid(uid);
return new JsonResult<>(OK, data);
}
73. 购物车-显示列表-前端页面
74. 显示确认订单页-显示当前用户的收货地址列表-前端页面
目前,已经可以通过http://localhost:8080/addresses
获取到当前登录的用户的收货地址列表数据!只需要将这些数据显示到页面orderConfirm.html中即可!
75. 显示确认订单页-显示前序页面勾选的即将购买的商品-持久层
需要执行的SQL语句大致是:
select 字段列表 from t_cart left join t_product on pid=id where cid in (?,?,?) order by t_cart.created_time desc
在CartMapper
接口添加抽象方法:
List<CartVO> findVOByCids(Integer[] cids);
在CartMapper.xml中配置:
<select id="xx" resultType="xx">
...
WHERE cid IN
<foreach collection="array"
item="cid" separator=","
open="(" close=")">
#{cid}
</foreach>
...
</select>