1 持久层
1.1 规划需要执行的SQL语句
1执行更新t_cart表记录的num值,无需重新开发
2 根据cid来查询当前的购物车这条数据是否存在
select * from t_cart where cid=?
<select id="findByCid" resultMap="CartEntityMap"> select * from t_cart where cid=#{cid} </select>
1.2 接口和抽象方法
Cart findByCid(Integer cid);
1.3 配置SQL的映射
<select id="findByCid" resultMap="CartEntityMap">
select * from t_cart where cid=#{cid}
</select>
编写测试方法
@Test
public void findByCid(){
System.out.println(cartMapper.findByCid(8));
}
2 业务层
2.1规划异常
1.在更新时会产生更新异常。
2.查询的数据是否有访问的权限。
3.查询的数据不存在,CartNotFoundException
2.2 设计接口和抽象方法
/**
* 更新用户的购物车数据的数量
* @param cid
* @param num
* @param username
* @return 增加成功后新的数量
*/
Integer addNum(Integer cid,Integer num,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;
}
3 控制层
3.1 处理异常
3.2 设计请求
/carts/{cid}/num/add
Integer cid ,httpSession
post
JsonResult<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);
}
4 前端页面
}
function addNum(cid){
$.ajax(
{
url:"/carts/"+cid+"/num/add",
type:"POST",
dataType:"JSON",
success:function (json) {
if(json.state==200){
console.log(json.data)
$("#goodsCount"+cid).val(json.data);
//获取某个标签内部的内容:文本标签
let price=$("#goodsPrice"+cid).html()
let totalPrice=price*json.data;
$("#goodsCast"+cid).html(totalPrice);
location.href="cart.html"
}else {
alert("增加购物车数据失败"+json.message)
}
},
error:function (xhr) {
alert("增加数量产生未知异常"+xhr.status)
}
}
);
}