store(商城项目)Springboot+springmvc+ajax+mybatis(14)

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西城男孩(0t0)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值