700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 设置默认收货地址

设置默认收货地址

时间:2022-10-21 22:07:27

相关推荐

设置默认收货地址

设置默认收货地址

持久层

SQL语句的规划

1.检测当前用户设置为默认收货地址的这条数据是否存在。

select * from t_address where aid=?

2.在修改用户的收货默认地址前,先将所有的收货地址设置为非默认。

update t_address set is_default=0 where uid=?

3.将用户当前选中的这条数据设置为默认收货地址。

update t_address set is_default=1,modified_user=?,modified_time=? where aid=?

设计抽象方法

在AddressMappe接口中进行定义和声明

/*** 根据aid查询地址数据* @param aid 收货地址id* @return 收货地址数据,如果没有找到则返回null值*/Address findByAid(Integer aid);/*** 根据用户的uid值来修改用户的收货地址设置为非默认* @param uid 用户的id值* @return 受影响的行数*/Integer updateNonDefault(Integer uid);/**** @param aid* @return*/Integer updateDefaultByAid(@Param("aid") Integer aid,@Param("modifiedUser") String modifiedUser,@Param("modifiedTime") Date modifiedTime);

配置SQL映射

AddressMapper.xml文件中进行配置。

<update id="updateNonDefault">UPDATE t_address SET is_default=0 WHERE uid=#{uid}</update><update id="updateDefaultByAid">UPDATE t_address SET is_default=1,modified_user=#{modifiedUser},modified_time=#{modifiedTime} WHERE aid=#{aid}</update><select id="findByAid" resultMap="AddressEntityMap">SELECT * FROM t_address WHERE aid={aid}</select>

在单元测试方法中进行测试。

@Testpublic void findByAid(){Address byAid = addressMapper.findByAid(15);System.out.println(byAid);}@Testpublic void updateNonDefault(){addressMapper.updateNonDefault(7);}@Testpublic void updateDefaultByAid(){addressMapper.updateDefaultByAid(15,"管理员",new Date());}

业务层

异常的规划

1.在执行更新时产生未知的UpdateException异常。已经创建无需重复创建。

2.访问的数据不是当前登录用户的收货地址数据,非法访问:AccessDeniedException异常。

3.收货地址有可能不存在的异常:AddressNotFoundException异常。

抽象方法

在接口IAddressSevice编写抽象方法

@Overridepublic void setDefault(Integer aid, Integer uid, String username) {}

实现抽象方法

在实现类中实现接口中的方法

@Overridepublic void setDefault(Integer aid, Integer uid, String username) {Address result = addressMapper.findByAid(aid);if(result == null){throw new AddressNotFoundException("收货地址不存在");}//检测当前收货地址归属if(!result.getUid().equals(uid)){throw new AccessDeniedException("非法数据访问");}//先将所有的收货地址设置为0(不是默认地址)Integer rows = addressMapper.updateNonDefault(uid);if(rows < 1 ){throw new UpdateException("修改数据时产生了未知的异常");}//设置选中的地址数据为1(默认地址)Integer rows1 = addressMapper.updateDefaultByAid(aid, username, new Date());if(rows1 != 1){throw new UpdateException("修改数据时产生了未知的异常");}}

编写测试类测试

@Testpublic void setDefault(){addressService.setDefault(16,7,"管理员");}

控制层

###处理异常

在BaseController类中进行统一的处理。

else if(e instanceof AddressCountLimitException){result.setstate(4003);result.setMessage("用户地址超出限制");}else if(e instanceof AccessDeniedException){result.setstate(4004);result.setMessage("非法数据访问");}

请求设计

/addresses/{aid}/set_default

@PathVariable(“id”) Integer aid,HttpSession session

GET

JsonResult

完成请求方法

在AddressController类中编写请求方法。

//RestFul风格的请求编写@RequestMapping("{aid}/set_default")public JsonResult<Void> setDefault(@PathVariable("aid") Integer aid,HttpSession session){Integer uid = getUidFromSession(session);String username = getUsernameFromSession(session);addressService.setDefault(aid,uid,username);return new JsonResult<>(OK);}打开浏览

器先登录再去访问一个请求路径localhost:8080/addresses/{aid}/set_default

前端页面

1.给设置默认收货地址按钮添加一个onclick属性,指向一个方法的调用,在这个方法中来完成ajax请求的方法。

let tr = '<tr>\n' +'<td>#{tag}</td>\n' +'<td>#{name}</td>\n' +'<td>#{address}</td>\n' +'<td>#{phone}</td>\n' +'<td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>\n' +'<td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 删除</a></td>\n' +'<td><a οnclick="setDefault(#{aid})" class="btn btn-xs add-def btn-default">设为默认</a></td>\n' +'</tr>';tr = tr.replace(/#{tag}/g, list[i].tag);tr = tr.replace(/#{name}/g, list[i].name);tr = tr.replace("#{address}", list[i].address);tr = tr.replace("#{phone}", list[i].phone);tr = tr.replace("#{aid}",list[i].aid);

address.html页面点击"设置默认"按钮,来发送ajax请求。完成setDefault()方法的声明和定义。

/*设置地址为默认地址*/function setDefault(aid) {$.ajax({url:"/addresses/"+ aid +"/set_default",type:"GET",dataType:"JSON",success:function(json){if(json.state == 200){//重新加载收货地址页面showAddressList();}else {alert("设置默认收货地址失败");}},error:function (xhr) {alert("设置默认收货地址时产生了未知的异常" + xhr.message);}});}

先登录再访问address.html页面进行测试。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。