当前位置:网站首页>設置默認收貨地址【項目 商城】
設置默認收貨地址【項目 商城】
2022-06-11 11:10:00 【日星月雲】
設置默認收貨地址【項目 商城】
設置默認收貨地址

1. 持久層
1.1 規劃SQL語句
修改 AddressService | getByUid
//address.setAid(null);
//address.setUid(null);
AddressService–Aid&Uid
1.檢測當前用戶想設置為默認地址的這條數據是否存在。
select * from t_address 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文件中進行配置。
<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>
AddressMapper–findByAid
測試
在單元測試方法中進行測試。
@Test
public void findByAid(){
Address address = addressMapper.findByAid(5);
System.out.println(address);
}
@Test
public void updateNonDefault(){
Integer rows = addressMapper.updateNonDefault(8);
System.out.println(rows);
}
@Test
public void updateDefaultByAid(){
Integer rows = addressMapper.updateDefaultByAid(5,"管理員",new Date());
System.out.println(rows);
}
AddressMapperTests–updateDefaultByAid
2.業務層
2.1 异常規劃
1.在執行更新時產生未知的UpdateException异常。已經創建無需重複創建。
2.訪問的數據不是當前登錄用戶的收貨地址數據,非法訪問:AccessDeniedException异常。
3.收貨地址有可能不存在:AddressNotFoundException异常。
默認收貨地址–ex
2.2 抽象方法
在接口IAddressService中編寫抽象方法的定義。
/** * 修改某個用戶的某條數據為默認收貨地址 * @param aid 收貨地址的id * @param uid 用戶的id * @param username 錶示修改執行的人 */
void setDefault(Integer aid,Integer uid,String username);
2.3 實現抽象方法
在AddressServiceImpl類中進行開發和業務設計。
@Override
public void setDefault(Integer aid, Integer uid, String username) {
// 根據參數aid,調用addressMapper中的findByAid()查詢收貨地址數據
Address result = addressMapper.findByAid(aid);
// 判斷查詢結果是否為null
if (result == null) {
// 是:拋出AddressNotFoundException
throw new AddressNotFoundException("嘗試訪問的收貨地址數據不存在");
}
// 判斷查詢結果中的uid與參數uid是否不一致(使用equals()判斷)
if (!result.getUid().equals(uid)) {
// 是:拋出AccessDeniedException
throw new AccessDeniedException("非法訪問的异常");
}
// 調用addressMapper的updateNonDefaultByUid()將該用戶的所有收貨地址全部設置為非默認,並獲取返回受影響的行數
Integer rows = addressMapper.updateNonDefault(uid);
// 判斷受影響的行數是否小於1(不大於0)
if (rows < 1) {
// 是:拋出UpdateException
throw new UpdateException("設置默認收貨地址時出現未知錯誤[1]");
}
// 調用addressMapper的updateDefaultByAid()將指定aid的收貨地址設置為默認,並獲取返回的受影響的行數
rows = addressMapper.updateDefaultByAid(aid, username, new Date());
// 判斷受影響的行數是否不為1
if (rows != 1) {
// 是:拋出UpdateException
throw new UpdateException("設置默認收貨地址時出現未知錯誤[2]");
}
}
AddressService–setDefault
測試
在單元測試類中進行測試。
@Test
public void setDefault(){
addressService.setDefault(4,8,"管理員");
}
AddressServiceTests–setDefault
3 控制層
3.1 處理异常
在BaseController中處理异常。
else if (e instanceof AccessDeniedException){
result.setState(4005);
result.setMessage("收貨地址數據非法訪問的异常");
}else if (e instanceof InsertException){
result.setState(5000);
result.setMessage("插入數據時產生未知的异常");
}
BaseController–ex–setDefault
3.2 設計請求
/address/{aid}/set_default
@PathVariable("aid") Integer aid,HttpSession session
GET
JsonResult<Void>
3.3 完成請求方法
在AddressController類中編寫請求處理方法。
//RestFul風格的請求編寫
@RequestMapping("{aid}/set_default")
public JsonResult<Void> setDefault(@PathVariable("aid") Integer aid,HttpSession session){
addressService.setDefault(
aid,
getuidFromSession(session),
getUsernameFromSession(session));
return new JsonResult<>(OK);
}
AddressController–setDefault
測試
打開瀏覽器登錄在去訪問請求路徑/address/{aid}/set_default
http://localhost:8080/address/5/set_default
4. 前端頁面
address.html頁面點擊“設置默認”按鈕,來發送ajax請求。
1.給設置默認收貨按鈕添加一個onclick屬性,指向一個方法的調用,在這個方法中來完成ajax請求的方法。
address.html | showAddressList方法中修改
+ '<td><a οnclick="setDefault(#{aid})" class="btn btn-xs add-def btn-default">設為默認</a></td>'
完成setDefault方法的定義
// <!--setDefault-->
function setDefault(aid) {
$.ajax({
url: "/address/" + aid + "/set_default",
type: "POST",
dataType: "JSON",
success: function(json) {
if (json.state == 200) {
showAddressList();
} else {
alert("設置默認收貨地址失敗!" + json.message);
}
},
error: function(xhr) {
alert("您的登錄信息已經過期,請重新登錄!HTTP響應碼:" + xhr.status);
location.href = "login.html";
}
});
}
// <!--setDefault-->
address.html–setDefault
測試
先登錄再訪問addAddress.html頁面進行測試。
修改路徑address–>addresses
README–設置默認收貨地址
边栏推荐
- 沒有財富就不能自由嗎?
- Taking the cooperation between different banks as an example, the construction of small program ecology
- MYSQL(九)
- 数字藏品系统源码搭建
- 6. how to automatically generate header file dependency -m
- Characteristics and classification of creation mode (single case, factory)
- MySQL (IX)
- Wechat cloud development al short video one click face changing applet source code
- C language course design
- 杰理之BLE 芯片供电范围及防烧芯片措施【篇】
猜你喜欢

Mn Monet pagoda host system v1.5 release

SurroundDepth:自监督多摄像头环视深度估计

使用Yolov5训练好模型调用电脑自带摄像头时出现问题:TypeError: argument of type “int‘ is not iterable的解决方法

如何养成一个好习惯?靠毅力?靠决心?都不是!
Implementing declarative rest calls using feign

杰理之BLE 芯片供电范围及防烧芯片措施【篇】

距离度量 —— 欧式距离(Euclidean Distance)

95后大厂程序员删库被判刑!只因项目被接手对领导心生不满

Use yolov3 to train yourself to make datasets and get started quickly
![Jerry's ble chip power supply range and anti burn chip measures [chapter]](/img/25/f35ca0366d31a70cd5e487347bb814.png)
Jerry's ble chip power supply range and anti burn chip measures [chapter]
随机推荐
Interpretation of cube technology | past and present life of cube Rendering Design
SQL query statement optimization
Typeerror: argument of type "Int 'is not Iterable
Taking the cooperation between different banks as an example, the construction of small program ecology
985高校博士因文言文致谢走红!导师评价其不仅SCI写得好...
杰理之BLEPR0 和 PR1 当普通 IO 口使用【篇】
Electron桌面端开发(开发一个闹钟【完结】)
使用Yolov3训练自己制作数据集,快速上手
SAP Spartacus Reference App Structure
Working principle analysis of rxjs fromEvent
Development of official account system for digital collection app applet
After 95, programmers in big factories were sentenced for deleting databases! Dissatisfied with the leaders because the project was taken over
CAP理论听起来很高大上,其实很简单
2022 Health Expo, Beijing Great Health Industry Exhibition, moxibustion health exhibition, Beijing Health Service Exhibition
MYSQL(九)
距离度量 —— 欧式距离(Euclidean Distance)
恋爱时将房屋一半产权登记在女方名下,分手后想要回
数字藏品app小程序公众号系统开发
Migrating minini to littlefs
1712. number of schemes for dividing the array into three sub arrays ●●