day05-功能实现04
家居网购项目实现04
以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git
10.功能09-后台管理 删除家居
10.1需求分析/图解
需求如下:
- 管理员进入到家居管理页面
- 点击删除家居连接,弹出确认窗口,确认删除,取消放弃

10.2思路分析

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("删除失败");
}
}

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完成测试
点击删除

删除成功

11.功能10-后台管理 修改家居
11.1需求分析/图解


- 管理员进入到家居管理页面furn_manage.jsp,点击修改按钮,跳转到furn_update.jsp
- 在furn_update.jsp先回显该家居信息
- 在框中填写新的信息,点击修改家居按钮
- 修改成功后,回到展示页面,重新刷新显示家居列表
11.2思路分析

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完成测试
点击修改按钮

跳转到修改页面,显示数据成功

插入新数据,点击修改按钮

页面跳转显示成功

day05-功能实现04的更多相关文章
- VirtualBox中安装Ubuntu12.04/Ubuntu14.04虚拟机
NOTE: 一开始安装的Ubuntu12.04,后来又重新安装了14.04.截图基本使用了安装12.04时的截图,后来安装14.04时又补充了几张.该安装过程对Ubuntu12.04和14.04都是适 ...
- X240 Ubuntu18.04安装流水帐
U盘安装 使用Startup Disk Creator和下载好的iso文件创建启动U盘 (在win7下官网建议的刻录软件是Rufus, https://rufus.akeo.ie/) Nautilus ...
- ubuntu18.04系统安装+基本环境配置【原创】
平台信息:PC:ubuntu18.04.i5.七彩虹GTX1060显卡.固态硬盘.机械硬盘 作者:庄泽彬(欢迎转载,请注明作者) 说明:在原本的电脑买一个独立显卡,装上去之后,出了各种问题,虽然后面勉 ...
- S2---深入.NET平台和C#编程的完美总结
1.NET简单解说 l 面向对象提升 OOP(Object Oriented Programming)面向对象编程 AOP:(Aspache Oriented Programming):面向切面编 ...
- Easy Sysprep更新日志-skyfree大神
Easy Sysprep更新日志: Skyfree 发表于 2016-1-22 13:55:55 https://www.itsk.com/forum.php?mod=viewthread&t ...
- IO流04--毕向东JAVA基础教程视频学习笔记
Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目 ...
- jexus
Jexus web server V5.1 安装配置要点 一.Jexus简介:Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux/unix操作系统之上, ...
- ThinkPHP项目CMS内容管理系统开发视频教程【20课】(3.02GB)
ThinkPHP背景介绍: ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业级应用开发而诞生的. ...
- Vbox中Ubuntu的安装和共享文件夹设置
1. 选择版本 1.1 Ubuntu桌面版与服务器版的区别 桌面版与服务器版,只要发布版本号一致,这两者从核心来说也就是相同的,唯一的差别在于它们的预期用途.桌面版面向个人电脑使用者,可以进行文字处理 ...
- JavaSE_ API常用对象 总目录(11~14)
JavaSE学习总结第11天_开发工具 & API常用对象111.01 常见开发工具介绍11.02 Eclipse和MyEclipse的概述11.03 Eclipse的下载安装及卸载11.04 ...
随机推荐
- 复现CVE-2022-10270(向日葵远程代码执行漏洞)
警告 请勿使用本文提到的内容违反法律.本文不提供任何担保. 漏洞描述 向日葵是一款免费的,集远程控制电脑手机.远程桌面连接.远程开机.远程管理.支持内网穿透的一体化远程控制管理工具软件.CNVD披露了 ...
- echarts pie饼状图绑定点击事件
var valueData = [ {value: 33,name: '诊所'}, {value: 29,name: '汽车服务相关'}, {value: 27, name: '洗衣店'}, {val ...
- 谣言检测——(PSA)《Probing Spurious Correlations in Popular Event-Based Rumor Detection Benchmarks》
论文信息 论文标题:Probing Spurious Correlations in Popular Event-Based Rumor Detection Benchmarks论文作者:Jiayin ...
- python-绘图与可视化
python 有许多可视化工具,但本书只介绍Matplotlib.Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在python脚本,IPython的交互环境下.Web应 ...
- Java学习之路:HelloWorld
2022-10-08 16:13:57 HelloWorld 1. 随便新建一个文件夹,存放代码 2. 新建一个Java文件 文件后缀名为.java hello.java 注意:系统没有显示后 ...
- mybatis-plugin插件执行原理
mybatis-plugin插件执行原理 今天主要是在看mybatis的主流程源码,其中比较感兴趣的是mybatis的plugin功能,这里主要记录下mybatis-plugin的插件功能原理. pl ...
- NLP之TextRNN(预测下一个单词)
TextRNN @ 目录 TextRNN 1.基本概念 1.1 RNN和CNN的区别 1.2 RNN的几种结构 1.3 多对多的RNN 1.4 RNN的多对多结构 1.5 RNN的多对一结构 1.6 ...
- iOS开发之自定义日历控件
前言 日常开发中经常会遇到日期选择,为了方便使用,简单封装了一个日历控件,在此抛砖引玉供大家参考. 效果 功能 支持单选.区间 支持默认选中日期 支持限制月份 支持过去.当前.未来模式 支持frame ...
- 基于LZO的高性能无损数据解压缩IP
LZOAccel-D LZO Data Decompression Core/无损数据解压缩IP Core LZOAccel-D是一个无损数据解压缩引擎的FPGA硬件实现,兼容LZO 2.10标准. ...
- ajax-Xhr
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...