当前位置:网站首页>設置默認收貨地址【項目 商城】
設置默認收貨地址【項目 商城】
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–設置默認收貨地址
边栏推荐
- Inventory of the 9 most famous work task management software at home and abroad
- Jerry's acquisition of ble to check the causes of abnormal conditions such as abnormal code reset [chapter]
- 6. how to automatically generate header file dependency -m
- 1712. 将数组分成三个子数组的方案数 ●●
- Design and implementation of interest social software platform based on location service (LBS) SSM framework
- Remote monitoring project offline log specification
- Want to be iron man? It is said that many big men use it to get started
- SAP Spartacus Reference App Structure
- Surrounddepth: self supervised multi camera look around depth estimation
- Appearance mode -- it has been used in various packages for a long time!
猜你喜欢

如何养成一个好习惯?靠毅力?靠决心?都不是!

DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM

Iterator mode -- battlefield autumn point

SpingBoot+Quartrz生产环境的应用支持分布式、自定义corn、反射执行多任务
![Jerry's acquisition of ble to check the causes of abnormal conditions such as abnormal code reset [chapter]](/img/c5/a9468ad75bd6a8776c0695140d1a5d.png)
Jerry's acquisition of ble to check the causes of abnormal conditions such as abnormal code reset [chapter]

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

2022年安全月各类活动方案汇报(28页)

Droid-slam: depth vision slam for monocular and binocular rgbd cameras

Don't be a fake worker

Use yolov5 to train your own data set and get started quickly
随机推荐
White screen time, first screen time
Use pydub to modify the bit rate of the wav file, and an error is reported: c:\programdata\anaconda3\lib\site packages\pydub\utils py:170: RuntimeWarning:
js设置ip屏蔽
SAP Spartacus Reference App Structure
使用Labelimg制作VOC数据集或yolo数据集的入门方法
Why does a ddrx power supply design require a VTT power supply
C language course design
DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM
What is the best annuity insurance product in 2022?
Update更新 bytea类型失败 PostGresql
34. 在排序数组中查找元素的第一个和最后一个位置 ●●
Is it safe to open an account online? Can ordinary people drive it?
MySQL download, installation and use - complete and detailed steps
2022健博会,北京大健康产业展,艾灸健康展,北京健康服务展
1712. number of schemes for dividing the array into three sub arrays ●●
数字藏品app小程序公众号系统开发
Content-Type: multipart/form-data; boundary=${bound}
Jerry's ble chip power supply range and anti burn chip measures [chapter]
2022年最好的年金险产品是什么?
Interpreting USB3.0 test items