🧸安清h:个人主页
🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】
🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。
目录
🚀设置默认收货地址- 持久层
✨1.1规划SQL语句
✨1.2设计抽象方法
✨1.3配置SQL映射
🚀设置默认收货地址- 业务层
✨2.1异常规划
✨2.2抽象方法
✨2.3实现抽象方法
🚀设置默认收货地址- 控制层
✨3.1处理异常
✨3.2设计请求
✨3.3处理请求
🚀设置默认收货地址- 前端页面
🎯1.删除收货地址-持久层
✨1.1规划SQL语句
✨1.2设计接口和抽象方法
✨1.3完成映射
🎯2.删除收货地址-业务层
✨2.1规划异常
✨2.2抽象方法的设计
✨2.3实现抽象方法
🎯3.删除收货地址-控制层
🎯4.删除收货地址-前端页面
🚀设置默认收货地址- 持久层
✨1.1规划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=?
✨1.2设计抽象方法
在AddressMapper接口中来定义声明。
/**
* 根据aid查询收货地址数据
* @param aid 收货地址id
* @return 收货地址数据,如果没有找到返回null
*/
Address findByAid(Integer aid);
/**
* 根据用户的uid来修改用户的收货地址设置为非默认
* @param uid 用户的id值
* @return 受影响的行数
*/
Integer updateNonDefault(Integer uid);
Integer updateDefaultByAid(@Param("aid") Integer aid,
@Param("modifiedUser") String modifiedUser,
@Param("modifiedTime") Date modifiedTime);
✨1.3配置SQL映射
在AddressMapper.xml文件中配置。
<select id="findByAid" resultMap="AddressEntityMap">
select * from t_address where aid=#{aid}
</select>
<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>
在单元测试方法中进行测试。
@Test
public void updateNonDefault(){
addressMapper.updateNonDefault(6);
}
@Test
public void updateDefaultByAid(){
addressMapper.updateDefaultByAid(1,"与水",new Date());
}
@Test
public void findByAid(){
System.out.println(addressMapper.findByAid(2));
}
🚀设置默认收货地址- 业务层
✨2.1异常规划
1.在执行更新时产生未知的UpdateException异常。已经创建无需重复创建。
2.访问的数据不是当前用户登录的收货地址的数据,非法访问:A***essDeniedException异常。
//非法访问的异常
public class A***essDeniedException extends ServiceException {
public A***essDeniedException() {
super();
}
public A***essDeniedException(String message) {
super(message);
}
public A***essDeniedException(String message, Throwable cause) {
super(message, cause);
}
public A***essDeniedException(Throwable cause) {
super(cause);
}
protected A***essDeniedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
3.收货地址有可能不存在的异常:AddressNotFoundException异常。
public class AddressNotFoundException extends ServiceException{
public AddressNotFoundException() {
super();
}
public AddressNotFoundException(String message) {
super(message);
}
public AddressNotFoundException(String message, Throwable cause) {
super(message, cause);
}
public AddressNotFoundException(Throwable cause) {
super(cause);
}
protected AddressNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
✨2.2抽象方法
在接口中编写抽象方法。
/**
* 修改某个用户的某条收货地址为默认收货地址
* @param aid 收货地址的id
* @param uid 用户的id
* @param username 修改执行的人
*/
void setDefault(Integer aid,Integer uid,String username);
✨2.3实现抽象方法
在AddressService