增加商品数量
1 持久层
1.1 规划需要执行的SQL语句
1.执行更新t_cart表中记录的num值,无需重复开发。
update t_cart set num=?,modified_user=?,modified_time=? where cid=?
2.根据cid的值查询当前的购物车这条数据是否存在。
select * form t_cart where cid=?
1.2 设计接口与抽象方法
Cart findByCid(Integer cid);
1.3 配置SQL映射
<select id="findByCid" resultMap="CartEntityMap"> SELECT * FROM t_cart WHERE cid=#{cid} </select>
CartMapper–findByCid
测试
编写一个单元测试方法。
@Test public void findByCid(){ System.out.println(cartMapper.findByCid(1)); }
CartMapperTests–findByCid
2 业务层
2.1 规划异常
1.在更新时会产生更新异常。
2.查询的数据是否有访问的权限。
3.要查询的数据不存在,抛出CartNotFoundException
CartNotFoundException
2.2 设计接口与抽象方法
/** * 更新用户的购物车数据的数量 * @param cid 购物车id * @param uid 用户id * @param username 用户名(修改者) * @return 增加成功后的新数量 */ Integer addNum(Integer cid,Integer uid,String username);
2.3 实现抽象方法
@Override public Integer addNum(Integer cid, Integer uid, String username) { Cart result = cartMapper.findByCid(cid); if (result==null){ throw new CartNotFoundException("数据不存在"); } if (!result.getUid().equals(uid)){ throw new AccessDeniedException("数据非法访问"); } Integer num=result.getNum()+1; Integer rows = cartMapper.updateNumByCid(cid, num, username, new Date()); if (rows!=1){ throw new UpdateException("更新数据失败"); } //返回新的购物车数据据总量 return num; }
CartServiceImpl–addNum
测试
略
3 控制层
3.1 处理异常
else if (e instanceof CartNotFoundException) { result.setState(4007); result.setMessage("购物车数据不存在的异常"); }
BaseController–CartNotFoundException
3.2设计请求
/carts/{cid}/num/add Integer cid,HttpSession session POST JsonRest<Integer>
3.3 处理请求
@RequestMapping("/{cid}/num/add") public JsonResult<Integer> addNum(@PathVariable("cid") Integer cid, HttpSession session) { Integer data = cartService.addNum(cid, getuidFromSession(session), getUsernameFromSession(session)); return new JsonResult<>(OK,data); }
测试
http://localhost:8080/carts/4/num/add
4 前端页面
cart.html
//addNum function addNum(cid) { $.ajax({ url: "/carts/" + cid + "/num/add", type: "POST", dataType: "JSON", success: function(json) { if (json.state == 200) { // showCartList(); $("#num-" + cid).val(json.data); //获取某个标签内部的内容:文本、标签 let price = $("#price-" + cid).html(); let totalPrice = price * json.data; $("#total-price-" + cid).html(totalPrice); } else { alert("增加商品数量失败!" + json.message); } }, error: function(xhr) { alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status); location.href = "login.html"; } }); } //addNum
cart.html–addNum
测试
减少商品数量
略
cart–reduceNum
README–增加购物车商品数量