家居網購項目實現04 以下皆為部分代碼,詳見 https://github.com/liyuelian/furniture_mall.git 10.功能09-後臺管理 刪除家居 10.1需求分析/圖解 需求如下: 管理員進入到家居管理頁面 點擊刪除家居連接,彈出確認視窗,確認刪除,取消放棄 10.2 ...
家居網購項目實現04
以下皆為部分代碼,詳見 https://github.com/liyuelian/furniture_mall.git
10.功能09-後臺管理 刪除家居
10.1需求分析/圖解
需求如下:
- 管理員進入到家居管理頁面
- 點擊刪除家居連接,彈出確認視窗,確認刪除,取消放棄
![image-20221219164920325](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219164920325.png)
10.2思路分析
![](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/%E5%90%8E%E5%8F%B0%E7%AE%A1%E7%90%86%20%E5%88%A0%E9%99%A4%E5%AE%B6%E5%B1%85.png)
10.3代碼實現
10.3.1dao層
FurnDAO介面
/**
* 通過傳入的id,刪除furn表中對應的記錄
*
* @param id id
* @return 返回受影響的行數
*/
public int deleteFurnById(int id);
FurnDAOImpl
@Override
public int deleteFurnById(int id) {
String sql = "DELETE FROM `furn` WHERE `id`=?;";
return update(sql, id);
}
10.3.2service層
FurnService介面
/**
* 根據id刪除對應的家居信息
*
* @param id id
* @return 返回修改表的行數
*/
public int deleteFurnById(int id);
FurnServiceImpl
@Override
public int deleteFurnById(int id) {
return furnDAO.deleteFurnById(id);
}
測試類
@Test
public void deleteFurnById() {
if (furnService.deleteFurnById(24) != 0) {
System.out.println("刪除成功");
} else {
System.out.println("刪除失敗");
}
}
![image-20221219181225540](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219181225540.png)
10.3.3web層
FurnServlet
/**
* 處理刪除家居的請求
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取請求刪除的家居id
String id = req.getParameter("id");
//防止接收的id不是一個數字型的字元串
furnService.deleteFurnById(DataUtils.parseInt(id, 0));
//重定向到家居列表頁-該地址由瀏覽器解析
resp.sendRedirect(req.getContextPath() + "/manage/furnServlet?action=list");
}
10.3.4前端頁面校驗
furn_manage.jsp添加校驗
<%--引入jquery--%>
<script type="text/javascript" src="script/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function () {
//獲取刪除id,綁定事件
$("a.deleteFurn").click(function () {
//獲取要刪除的家居的名字
var furnName = $(this).parent().parent().find("td:eq(1)").text();
//confirm彈出的視窗,點擊確定返回true,點擊取消返回false
return confirm("確認要刪除"+furnName+"嗎?");
})
})
</script>
10.4完成測試
點擊刪除
![image-20221219184622113](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219184622113.png)
刪除成功
![image-20221219184635704](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219184635704.png)
11.功能10-後臺管理 修改家居
11.1需求分析/圖解
![image-20221219185628206](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219185628206.png)
![image-20221219185715835](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219185715835.png)
- 管理員進入到家居管理頁面furn_manage.jsp,點擊修改按鈕,跳轉到furn_update.jsp
- 在furn_update.jsp先回顯該家居信息
- 在框中填寫新的信息,點擊修改家居按鈕
- 修改成功後,回到展示頁面,重新刷新顯示家居列表
11.2思路分析
![](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/%E5%90%8E%E5%8F%B0%E7%AE%A1%E7%90%86%20%E4%BF%AE%E6%94%B9%E5%AE%B6%E5%B1%85.png)
11.3代碼實現
11.3.1dao層
FurnDAO介面
/**
* 通過傳入的id,返回furn表中對應的furn對象
* @param id id
* @return 返回furn表中對應的furn對象
*/
public Furn queryFurnById(int id);
/**
* 通過傳入的furn對象,修改furn表對應的記錄的欄位值
* @param furn 傳入的furn對象
* @return 返回受影響的行數
*/
public int updateFurn(Furn furn);
FurnDAOImpl
@Override
public Furn queryFurnById(int id) {
String sql = "SELECT `id` , `name` , `maker` , `price` , `sales` , `stock` , `img_path` AS imgPath " +
"FROM `furn` WHERE id=?";
return querySingle(sql, Furn.class, id);
}
@Override
public int updateFurn(Furn furn) {
String sql = "UPDATE `furn` " +
"SET `name`=?, `maker`=?,`price`=?,`sales`=?,`stock`=?,`img_path`=? " +
"WHERE `id`=?";
return update(sql, furn.getName(), furn.getMaker(), furn.getPrice(),
furn.getSales(), furn.getStock(), furn.getImgPath(), furn.getId());
}
FurnDAOImplTest
@Test
public void queryFurnById() {
Furn furn = furnDAO.queryFurnById(1);
System.out.println(furn);
}
@Test
public void updateFurn() {
Furn furn = new Furn(39,"king","皇家家居",new BigDecimal(999),
88,99,"assets/images/product-image/default.jpg");
int i = furnDAO.updateFurn(furn);
System.out.println("i=" + i);
}
11.3.2service層
FurnService
/**
* 根據id返回家居信息
*
* @param id id
* @return 返回furn表中對應的furn對象
*/
public Furn queryFurnById(int id);
/**
* 將傳入的furn對象,根據id更新到furn表對應的欄位
*
* @param furn 傳入的furn對象
* @return 返回受影響的行數
*/
public int updateFurn(Furn furn);
FurnServiceImpl
@Override
public Furn queryFurnById(int id) {
return furnDAO.queryFurnById(id);
}
@Override
public int updateFurn(Furn furn) {
return furnDAO.updateFurn(furn);
}
FurnServiceImplTest
@Test
public void queryFurnById() {
Furn furn = furnService.queryFurnById(1);
System.out.println(furn);
}
@Test
public void updateFurn() {
int i = furnService.updateFurn(new Furn(38, "queen", "皇家家居", new BigDecimal(888),
99, 21, "assets/images/product-image/default.jpg"));
System.out.println("i=" + i);
}
11.3.3web層
FurnServlet
/**
* 處理顯示單個家居信息的請求
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void showFurn(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取請求顯示的家居id
String id = req.getParameter("id");
//在資料庫中查詢,得到furn對象
Furn furn = furnService.queryFurnById(DataUtils.parseInt(id, 0));
//將furn放入到request域中
req.setAttribute("furn", furn);
//請求轉發到furn_update.jsp中,在該頁中顯示furn信息
//這裡使用請求轉發是因為如果使用重定向,當刷新頁面之後就沒有了request域中的信息
req.getRequestDispatcher("/views/manage/furn_update.jsp")
.forward(req, resp);
}
/**
* 處理修改家居的請求
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//自動填充Javabean
Furn furn = DataUtils.copyParamToBean(req.getParameterMap(), new Furn());
//調用updateFurn,更改數據
furnService.updateFurn(furn);
//修改成功後重定向,顯示列表家居
resp.sendRedirect(req.getContextPath() + "/manage/furnServlet?action=list");
}
相應的前端介面也需要修改,這裡忽略
utils包工具類DataUtils:
package com.li.furns.utils;
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
/**
* @author 李
* @version 1.0
*/
public class DataUtils {
public static <T> T copyParamToBean(Map value, T bean) {
try {
//將req.getParameterMap()的數據自動封裝到furn對象中
//底層使用反射將數據封裝,前提是,表單提交的數據欄位名稱必須和Javabean的屬性名一致
BeanUtils.populate(bean, value);
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}
//將字元串轉成數字,否則返回預設值
public static int parseInt(String str, int defaultVal) {
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println(str + " 格式不正確");
}
return defaultVal;
}
}
11.4完成測試
點擊修改按鈕
![image-20221219222230724](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219222230724.png)
跳轉到修改頁面,顯示數據成功
![image-20221219222355131](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219222355131.png)
插入新數據,點擊修改按鈕
![image-20221219222513008](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219222513008.png)
頁面跳轉顯示成功
![image-20221219222546179](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219222546179.png)
資料庫顯示修改成功
![image-20221219223747807](https://liyuelian.oss-cn-shenzhen.aliyuncs.com/imgs/image-20221219223747807.png)