概述
72. 显示确认订单信息页
显示“确认订单信息”页面中,需要显示2种数据:当前用户的所有收货地址列表;用户在前序页面中选择的购物车中的商品。
首先,完成“显示当前用户的所有收货地址的列表”,在此前开发“收货地址”相关功能时,已经可以通过/addresses/
这个URL获取收货地址列表!则直接在orderConfirm.html
中通过$.ajax()
获取数据并显示即可!
接下来,应该“显示用户在前序页面中选择的购物车中的商品的列表”,对应的查询功能的SQL语句大致是:
select * from t_cart left join t_product on t_cart.pid=t_product.id where cid in (?,?,?)
所以,需要在CartMapper.java
接口中添加:
List<CartVO> findByCids(Integer[] cids);
在CartMapper.xml
中配置以上抽象方法的映射:
<select id="findByCids" resultType="xx.xx.xx.CartVO">
SELECT
cid, uid,
pid, t_cart.num,
t_cart.price, t_product.price AS realPrice,
title, image
FROM
t_cart
LEFT JOIN
t_product
ON
t_cart.pid=t_product.id
WHERE
cid IN
<foreach collection="array"
item="cid" seperator=","
open="(" close=")">
#{cid}
</foreach>
ORDER BY
t_cart.created_time DESC
</select>
完成持久层后,接下来,需要在ICartService
业务层接口中添加抽象方法,以对外提供数据访问功能:
List<CartVO> getByCids(Integer[] cids, Integer uid);
然后,在实现类中,先私有化编写持久层的方法:
private List<CartVO> findByCids(Integer[] cids) {
return cartMapper.findByCids(cids);
}
并重写接口中的抽象方法:
public List<CartVO> getByCids(Integer[] cids, Integer uid) {
if (cids == null) {
return new ArrayList<>();
}
List<CartVO> result = findByCids(cids);
Iterator<CartVO> it = result.iterator();
while(it.hasNext()) {
CartVO cartVO = it.next();
if (cartVO.getUid() != uid) {
it.remove();
}
}
return result;
}
测试完成后,需要在控制器层提供接口:
@GetMapping("get_by_cids")
public JsonResult<List<CartVO>> getByCids(
Integer[] cids, HttpSession session) {
// 从session中获取uid
Integer uid = getUidFromSession(session);
// 调用业务层对象的方法执行任务
List<CartVO> data = cartService.getByCids(cids, uid);
// 响应成功
return new JsonResult<>(SUCCESS, data);
}
然后,打开浏览器,可以通过http://localhost:8080/carts/get_by_cids?cids=14&cids=15&cids=16
进行单元测试。
测试完成后,需要在orderConfirm.html
中发出对这个URL的请求,以获取数据,并显示。
73. 创建订单-创建数据表
创建“订单表”:
CREATE TABLE t_order (
oid INT AUTO_INCREMENT COMMENT '订单id',
uid INT COMMENT '用户id',
recv_name VARCHAR(50) COMMENT '收货人receiver姓名',
recv_phone VARCHAR(20) COMMENT '收货人电话',
recv_province VARCHAR(50) COMMENT '收货地址所在省',
recv_city VARCHAR(50) COMMENT '收货地址所在市',
recv_area VARCHAR(50) COMMENT '收货地址所在区',
recv_address VARCHAR(100) COMMENT '详细收货地址',
total_price BIGINT COMMENT '总价',
status INT COMMENT '状态:0-未支付,1-已支付,2-已取消',
order_time DATETIME COMMENT '下单时间',
pay_time DATETIME COMMENT '支付时间',
created_user VARCHAR(50) COMMENT '创建人',
created_time DATETIME COMMENT '创建时间',
modified_user VARCHAR(50) COMMENT '最后修改人',
modified_time DATETIME COMMENT '最后修改时间',
PRIMARY KEY (oid)
) DEFAULT CHARSET=UTF8;
创建“订单商品表”:
CREATE TABLE t_order_item (
id INT AUTO_INCREMENT COMMENT 'id',
oid INT COMMENT '归属的订单id',
pid INT COMMENT '商品id',
title VARCHAR(100) COMMENT '商品标题',
image VARCHAR(500) COMMENT '商品图片',
price BIGINT COMMENT '商品单价',
num INT COMMENT '购买数量',
created_user VARCHAR(50) COMMENT '创建人',
created_time DATETIME COMMENT '创建时间',
modified_user VARCHAR(50) COMMENT '最后修改人',
modified_time DATETIME COMMENT '最后修改时间',
PRIMARY KEY (id)
) DEFAULT CHARSET=UTF8;
73. 创建订单-创建实体类
74. 创建订单-持久层
只需要1个接口OrderMapper,而不需要OrderItemMapper。
所以,也只需要1个XML映射文件。
----------------------------------------------------
抽象类和接口的区别
- 藐视;
- 语法方面的区别;
- 深层次的理解;
- 应用方式、经验分享。
类:类别;接口:规范、标准、行为模式等。
类 is a 抽象类;实现类 has a 接口。
public class Teacher extends Person
public class Student extends Person
厨师,医生,司机……
public class Person implements 讲授, 学习, 烹饪, 医疗, 驾驶 {
}
最后
以上就是坚强小伙为你收集整理的2019_07_11 store商品模块_第十一天的全部内容,希望文章能够帮你解决2019_07_11 store商品模块_第十一天所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复