【WEEK4】 【DAY3】整合SSM框架之功能实现—修改、删除数据【中文版】

2024.3.20 Wednesday

接上文【WEEK4】 【DAY2】整合SSM框架之功能实现—总览、添加数据【中文版】

目录

  • 7.6.修改功能
    • 7.6.1.修改BookController.java
    • 7.6.2.修改allBook.jsp
    • 7.6.3.新建updateBook.jsp
    • 7.6.4.修改MyBatis-config.xml
    • 7.6.5.运行
  • 7.7.删除功能
    • 7.7.1.修改BookController.java
    • 7.7.2.修改allBook.jsp
    • 7.7.3.修改BookDao.xml
    • 7.7.4.运行

7.6.修改功能

7.6.1.修改BookController.java

(加上删除功能的完整BookController.java代码位于7.7.1.)

//跳转到修改页面
@RequestMapping("/toUpdate")
public String toUpdatePaper(int id,Model model){Books books = bookService.queryBookById(id);    //返回一本书model.addAttribute("QBook",books);return "updateBook";
}//修改书籍
@RequestMapping("updateBook")
public String updateBook(Books books){System.out.println("updateBook=>"+books);bookService.updateBook(books);return "redirect:/book/allBook";
}

7.6.2.修改allBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>书籍展示页</title><%--BootStrap美化页面--%><%--导入在线BootStrap--%><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container"> <%--容器--%><div class="row clearfix">  <%--标记栏,清除浮动--%><div class="col-md-12 column"><div class="page-header">   <!--为标签为h1的内容增加空间(和其他部分分隔)--><h1><small>书籍列表——显示所有书籍</small></h1></div></div><div class="row"><div class="col-md-4 column"><%--应该添加一个请求->由BookController.java进行处理--%><a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增书籍</a><%--建立一个按钮--%></div></div></div><div class="row clearfix"><div class="col-md-12 column"><table class="table table-hover table-striped"> <%--鼠标漂浮在某行上方时加深颜色--%><thead><tr>    <%--表格抬头--%><th>书籍编号</th><th>书籍名称</th><th>书籍数量</th><th>书籍详情</th><th>操作</th></tr></thead><%--书籍从数据库中查询出来,从这个list中遍历出来,使用foreach--%><tbody><%--c:forEach会自动导入标签(第一行)--%><c:forEach var="book" items="${list}"><tr><td>${book.bookID}</td><td>${book.bookName}</td><td>${book.bookCounts}</td><td>${book.detail}</td><td>    <%--操作,&nbsp为空格。修改时希望能够看到原本的数据,故需要先获取到相关数据(这里是传入原书籍的id)--%><a href="${pageContext.request.contextPath}/book/toUpdate?id=${book.bookID}">修改</a>&nbsp; | &nbsp;<%--“#”号用于占位,在这里页面上虽然出现“删除”字样但是没用任何实现功能--%><a href="#">删除</a></td></tr></c:forEach></tbody></table></div></div></div></body>
</html>

7.6.3.新建updateBook.jsp

在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>修改书籍信息</title><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css" rel="stylesheet">
</head><body><div class="container"> <%--容器--%><div class="row clearfix">  <%--标记栏,清除浮动--%><div class="col-md-12 column"><div class="page-header">   <!--为标签为h1的内容增加空间(和其他部分分隔)--><h1><small>修改书籍</small></h1></div></div></div><%--书籍表单--%><form action="${pageContext.request.contextPath}/book/updateBook" method="post"><%--value后面的表示默认值--%><input type="hidden" name="bookID" value="${QBook.bookID}"/>    <%--这行掌管修改的成功与否,是前端使用隐藏域返回id--%>书籍名称:<input type="text" name="bookName" value="${QBook.bookName}"/>书籍数量:<input type="text" name="bookCounts" value="${QBook.bookCounts}"/>书籍详情:<input type="text" name="detail" value="${QBook.detail}"/><input type="submit" value="修改"/></form></div></body>
</html>

隐藏域
https://baike.baidu.com/item/%E9%9A%90%E8%97%8F%E5%9F%9F/249616?fr=ge_ala
jsp页面表单提交后mysql未更新原因
https://www.cnblogs.com/Meng2113/p/13511800.html

7.6.4.修改MyBatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--加上以下三行配置->每一步操作都会在server显式打印--><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><!--配置数据源,移交到Spring完成--><typeAliases><package name="P17.project"/></typeAliases><mappers><!--如果dao中两个文件名称不同,则使用mapper resource--><!--以下三行任选一行即可--><mapper resource="P17/dao/BookDao.xml"/>
<!--        <mapper class="P17.dao.BookDao"/>-->
<!--        <package name="P17.dao"/>--></mappers>
</configuration>

7.6.5.运行

http://localhost:8080/SSMbuild_war_exploded/(主页没变化)
http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述
http://localhost:8080/SSMbuild_war_exploded/book/toUpdate?id=1
在这里插入图片描述
已修改
http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述

7.7.删除功能

7.7.1.修改BookController.java

package P17.controller;import P17.project.Books;
import P17.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;import java.awt.print.Book;
import java.util.List;@Controller
@RequestMapping("/book")
public class BookController {
//controller调用service层@Autowired@Qualifier("BookServiceImplement")private BookService bookService;//查询全部的书籍,并返回到一个书籍展示页面@RequestMapping("/allBook")public String list(Model model){List<Books> list = bookService.queryAllBook();  //调用业务层的方法,查询到所有的书籍model.addAttribute("list",list);    //返回前端查询return "allBook";  //返回到allBook.jsp}//跳转到增加书籍页面@RequestMapping("/toAddBook")public String toAddPaper(){return "addBook";}//添加书籍的请求@RequestMapping("/addBook")public String addBook(Books books){System.out.println("addBook=>"+books);  //打印日志bookService.addBook(books);return "redirect:/book/allBook";    //重定向到@RequestMapping("/allBook")请求}//跳转到修改页面@RequestMapping("/toUpdate")public String toUpdatePaper(int id,Model model){Books books = bookService.queryBookById(id);    //返回一本书model.addAttribute("QBook",books);return "updateBook";}//修改书籍@RequestMapping("updateBook")public String updateBook(Books books){System.out.println("updateBook=>"+books);bookService.updateBook(books);return "redirect:/book/allBook";}//删除书籍,使用RestFul风格@RequestMapping("/deleteBook/{bookId}")public String deleteBook(@PathVariable("bookId") int id){bookService.deleteBookById(id);return "redirect:/book/allBook";}
}/*
这是一般的解决方法@RequestMapping("/deleteBook")public String deleteBook(int id){bookService.deleteBookById(id);return "redirect:/book/allBook";}*/

7.7.2.修改allBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>书籍展示页</title><%--BootStrap美化页面--%><%--导入在线BootStrap--%><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container"> <%--容器--%><div class="row clearfix">  <%--标记栏,清除浮动--%><div class="col-md-12 column"><div class="page-header">   <!--为标签为h1的内容增加空间(和其他部分分隔)--><h1><small>书籍列表——显示所有书籍</small></h1></div></div><div class="row"><div class="col-md-4 column"><%--应该添加一个请求->由BookController.java进行处理--%><a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增书籍</a><%--建立一个按钮--%></div></div></div><div class="row clearfix"><div class="col-md-12 column"><table class="table table-hover table-striped"> <%--鼠标漂浮在某行上方时加深颜色--%><thead><tr>    <%--表格抬头--%><th>书籍编号</th><th>书籍名称</th><th>书籍数量</th><th>书籍详情</th><th>操作</th></tr></thead><%--书籍从数据库中查询出来,从这个list中遍历出来,使用foreach--%><tbody><%--c:forEach会自动导入标签(第一行)--%><c:forEach var="book" items="${list}"><tr><td>${book.bookID}</td><td>${book.bookName}</td><td>${book.bookCounts}</td><td>${book.detail}</td><td>    <%--操作,&nbsp为空格。修改时希望能够看到原本的数据,故需要先获取到相关数据(这里是传入原书籍的id)--%><a href="${pageContext.request.contextPath}/book/toUpdate?id=${book.bookID}">修改</a>&nbsp; | &nbsp;<%--删除--%><a href="${pageContext.request.contextPath}/book/deleteBook/${book.bookID}">删除</a></td></tr></c:forEach></tbody></table></div></div></div></body>
</html>

7.7.3.修改BookDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--一个mapper对应一个接口-->
<mapper namespace="P17.dao.BookDao"><!--增加一本书--><insert id="addBook" parameterType="books">
#         ssmbuild.books指的是在ssmbuild数据库中的books这张表上进行操作INSERT INTO ssmbuild.books(bookName, bookCounts, detail)VALUES (#{bookName},#{bookCounts},#{detail});</insert><!--根据id删除一本书--><!--这里的id就是BookController中调用bookService.deleteBookById(id);的具体方法名,不能写错,否则报错500--><delete id="deleteBookById" parameterType="int">DELETE FROM ssmbuild.books WHERE bookID = #{bookId}</delete><!--更新Book--><update id="updateBook" parameterType="Books">UPDATE ssmbuild.booksSET bookName = #{bookName}, bookCounts = #{bookCounts}, detail = #{detail}WHERE bookID = #{bookID}</update><!--根据id查询,返回一个Book--><select id="queryBookById" resultType="Books">SELECT * FROM ssmbuild.booksWHERE bookID = #{bookId}</select><!--查询全部Book--><select id="queryAllBook" resultType="Books">SELECT * FROM ssmbuild.books</select></mapper>

7.7.4.运行

http://localhost:8080/SSMbuild_war_exploded/(主页没变化)
http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述
点击“删除”后在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据库系统】数据库完整性和安全性

第六章 数据库完整性和安全性 基本内容 安全性&#xff1b;完整性&#xff1b;数据库恢复技术&#xff1b;SQL Server的数据恢复机制&#xff1b; 完整性 实体完整性、参照完整性、用户自定义完整性 安全性 身份验证权限控制事务日志&#xff0c;审计数据加密 数据库恢复 冗余…

JavaWeb:AOP、配置优先级、Bean管理、SpringBoot原理、Maven高级

1 AOP 1.1 基本语法 面向切面编程、面向方面编程&#xff0c;面向特定方法编程 在管理bean对象的过程中&#xff0c;主要通过底层的动态代理机制&#xff0c;对特定的方法进行编程 应用&#xff1a;统计每一个业务方法的执行耗时 xml引入依赖 <!-- AOP-->&l…

音视频开发_FFmpeg基石精讲

FFmpeg 框架 核心组件 libavcodec&#xff1a;一个编解码库&#xff0c;包含了众多的编码器和解码器用于编码和解码音视频流。libavformat&#xff1a;一个封装格式库&#xff0c;用于处理各种音视频封装格式。libavutil&#xff1a;一个工具库&#xff0c;提供了常见功能的简…

牛客周赛 Round 37 E.魔法之森的蘑菇

广搜板子&#xff0c;加个方向就好了 注意多测清空问题 #include<bits/stdc.h> using namespace std; using ll long long; #define int long long const int N 1e510; const int inf 0x3f3f3f3f; const int mod 1e97;int n,m; char g[1010][1010]; bool vis[1010][1…

CI/CD实战-jenkins部署 3

安装 软件下载地址&#xff1a;Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 启动服务 安装推荐插件 不新建用户&#xff0c;使用admin账号登录 修改一下初始密码 新建项目测试 安装git命令 生成密钥 在gitlab中上传公钥 修改ssh 创建中…

蓝桥杯(3.22 刷真题)

P8682 [蓝桥杯 2019 省 B] 等差数列 RE是因为除以0的情况 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] res new int[n1];for(int i1;i&l…

城管智慧执法系统源码有演示,自主研发,功能完善,正版授权,可商用上项目。

城管智慧执法系统源码有演示&#xff0c;自主研发&#xff0c;功能完善&#xff0c;正版授权&#xff0c;可商用上项目。 一套数字化的城管综合执法办案系统源码&#xff0c;提供了案件在线办理、当事人信用管理、文书电子送达、沿街店铺视频智能分析等功能&#xff0c;全面赋能…

软考 网络工程师 每日学习打卡 2024/3/22

学习内容 第9章 网络操作系统与应用服务器 本章主要讲解&#xff1a;了Windows和Linux操作系统的基础知识&#xff0c;并详细讲述了常用的各种服务器的 配置方法。这一章的内容主要是在具体操作方面&#xff0c;网络工程师要能够熟练地配置各种网络服务 器&#xff0c;排除网络…

(2024,Mamba,DiT,之字扫描与空间连续性)ZigMa:之字形 Mamba 扩散模型

ZigMa: Zigzag Mamba Diffusion Model 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 背景&#xff1a;状态空间模型 3.2 扩散主干&…

6.shell case控制语句

case控制语句 1.什么是case case条件语句相当于多分支的if/elif/else条件语句&#xff0c;主要还是用来做条件判断的,常被应用于实现系统服务启动脚本。 case语句中&#xff0c;会将case获取的变量值与表达式部分的值1、值2、值3等逐个进行比较&#xff0c;如果变量值和某个表…

【算法刷题】Day33

文章目录 1. 最长湍流子数组题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺序5. 返回值 代码&#xff1a; 2. 最长递增子序列题干&#xff1a;算法原理&#xff1a;1. 状态表示&#xff1a;2. 状态转移方程3. 初始化4. 填表顺…

自学Python第二十九天-feapder框架创建爬虫

自学Python第二十九天-feapder框架创建爬虫 安装feapder 的设计架构feapder 框架的简单使用简单创建爬虫简单爬取数据简单的数据保存 中间件校验浏览器渲染使用浏览器渲染获取接口数据 feapder 项目 feapder是一款上手简单&#xff0c;功能强大的 Python爬虫框架&#xff0c;内…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(日期滑动选择器弹窗)

根据指定的日期范围创建日期滑动选择器&#xff0c;展示在弹窗上。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&…

【JS】如何避免输入中文拼音时触发input事件

现有一段代码&#xff0c;监听input事件。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" con…

SpringBoot+Vue项目(后端项目搭建 + 添加家居)

文章目录 1.使用版本控制管理该项目1.创建远程仓库2.克隆到本地 2.后端项目环境搭建1.创建一个maven项目2.删除不必要的文件夹3.pom.xml文件引入依赖4.application.yml 配置数据源&#xff08;注意&#xff0c;数据库名还没写&#xff09;5.com/sun/furn/Application.java 编写…

蓝桥杯算法心得——游戏(优先队列)

大家好&#xff0c;我是晴天学长&#xff0c;优先队列的题&#xff0c;式子化简非常重要&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .游戏 2) .算法思路 附近最小 1.接收数据 2.找出最小的&#…

安防监控平台EasyCVR使用管理员权限登录后,平台菜单栏显示不全是什么原因?

安防视频监控系统EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;平台能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;平台支持设备通过4G、5G、WIFI、有…

I2C协议

一.硬件连接 I2C必须使用开漏&#xff08;或集电极开路&#xff09;的引脚&#xff0c;其引脚框图如下所示。 SCL0对应78K0的P6.0引脚&#xff0c;SDA0对应78K0的P6.1引脚。 在使用开漏引脚通信时&#xff0c;需注意如下事项&#xff1a; 1&#xff09;两条总线须外接…

【Java - API - 多线程】(01) 通过Java 8完成多线程的创建,快速上手

通过"Java 8"完成多线程的创建&#xff0c;快速上手&#xff1b; 实操 【前提】 使用"Windows 11"系统通过"IntelliJ IDEA"软件完成&#xff1b; 【目录】 “方式1”&#xff1a;通过继承"Thread"完成-正常操作&#xff1b;“方式2”…

【QT入门】 Qt自定义信号后跨线程发送信号

往期回顾&#xff1a; 【QT入门】 lambda表达式(函数)详解-CSDN博客 【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客 【QT入门】 Qt实现自定义信号-CSDN博客 【QT入门】 Qt自定义信号后跨线程发送信号 由于Qt的子线程是无法直接修改ui&#xff0c;需要发送信号到ui线程进行修改…