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

news2024/11/15 21:41:21

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 configuration
        PUBLIC "-//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 mapper
        PUBLIC "-//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.books
        SET bookName = #{bookName}, bookCounts = #{bookCounts}, detail = #{detail}
        WHERE bookID = #{bookID}
    </update>

    <!--根据id查询,返回一个Book-->
    <select id="queryBookById" resultType="Books">
        SELECT * FROM ssmbuild.books
        WHERE 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.coloradmin.cn/o/1536092.html

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

相关文章

网络原理(4)——TCP协议的特性

目录 一、滑动窗口 1、ack丢了 2、数据丢了 二、流量控制&#xff08;流控&#xff09; 三、拥塞控制 拥塞窗口动态变化的规则 四、延时应答 五、捎带应答 六、面向字节流 七、异常情况 &#xff08;1&#xff09;进程崩溃了 &#xff08;2&#xff09;其中一方关机…

Ubuntu系统提示“/dev/mmcblk0p1 分区满了‘以及磁盘空间不够的处理办法

查看boot分区使用空间&#xff1a; df 查看已安装的内核版本&#xff1a; dpkg --get-selections | grep linux &#xff08;其中带image的一般就是旧版本&#xff0c;deinstall代表已经删除的旧版本&#xff0c;install代表还未删除的旧版本内核&#xff09; 查看系统当前…

基于java+springboot+vue实现的健身房管理系统(文末源码+Lw+ppt)23-523

摘 要 健身房管理的以往工作流程繁杂、多样、管理复杂与设备维护繁琐。而如今计算机已完全能够胜任健身房管理工作&#xff0c;而且更加准确、方便、快捷、高效、清晰、透明&#xff0c;它完全可以克服以上所述的不足之处。这将给查询信息和管理带来很大的方便&#xff0c;从…

晶体管测试仪系统能测 IGBT. Mosfet. Diode. BJT......

晶体管测试仪系统能测试很多电子元器件的静态直流参数&#xff08;如击穿电压V(BR)CES/V(BR)DSs、漏电流ICEs/lGEs/IGSs/lDSs、阈值电压/VGE(th)、开启电压/VCE(on)、跨导/Gfe/Gfs、压降/Vf、导通内阻Rds(on)&#xff09;。 测试种类覆盖 7 大类别26分类&#xff0c;包括“二极…

Redis 更新开源许可证 - 不再支持云供应商提供商业化的 Redis

原文&#xff1a;Rowan Trollope - 2024.03.20 未来的 Redis 版本将继续在 RSALv2 和 SSPLv1 双许可证下提供源代码的免费和宽松使用&#xff1b;这些版本将整合先前仅在 Redis Stack 中可用的高级数据类型和处理引擎。 从今天开始&#xff0c;所有未来的 Redis 版本都将以开…

力扣454. 四数相加 II

思路&#xff1a;把四个数组拆成两对&#xff0c;两个分别相加&#xff0c;记录第一对的相加结果进map里&#xff0c;再把第二对数组 0-nums2-nums4 去map里面找出现了几次&#xff0c;这题不用对重复的四元组去重&#xff0c;所以出现多次都有效。 class Solution {public int…

Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证

昨日&#xff0c;Redis 官方宣布了一项重要变更&#xff1a;他们将修改开源协议&#xff0c;未来所有版本将采用 “源代码可用” 的许可证。 具体来说&#xff0c;Redis 不再使用 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始&#xff0c;Redis 将采用 SSPLv1 和 RSA…

探索大广赛获奖作品:职场设计风云的精彩篇章

2024第16届全国大学生创意广告大赛正在火热进行中&#xff0c;今天就与大家分享一些平面类往届优秀获奖作品&#xff0c;仅供参考~灵感慢慢&#xff0c;不要错过哦&#xff01; 大广赛命题素材下载&#xff1a; 下载地址https://js.design/f/Jspbti?sourcecsdn&planbtts…

Go语言学习Day1:什么是Go?

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…

excel文件可以转成word文件吗?汇帮PDF转换器帮你实现excel转word

将Excel文件转换为Word文档是一个相对简单的任务&#xff0c;但在执行过程中需要注意一些细节&#xff0c;以确保转换后的文档格式正确、内容清晰。下面将详细介绍用汇帮PDF转换器将Excel转Word的步骤和注意事项。 一、Excel文件准备 在进行转换之前&#xff0c;首先确保Excel…

软考高级:UML 图-状态图概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

科研学习|论文解读——通过调查实验了解公民对政府财政信息的认知(GIQ,2022)

原文题目 Understanding citizens perception of government fiscal information through a survey experiment 摘要 州和地方政府定期向公众披露财务信息&#xff0c;以便公开承认政府当前的财务状况。此类披露的目的是实现问责制并让公民了解政府的财务决策。(背景&#xff0…

MySQL之索引与事务

一 索引的概念 一种帮助系统查找信息的数据 数据库索引 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址无须对整个表进行扫描&#xff0c;通过物理地 址就可以找到所需数据是表中一列或者若干列值排序的方法 需要额外的磁盘空间 索引的作用 1 数据库…

mysqly索引(explain 执行计划)

关键词 执行计划 EXPLAIN 语句查看mysql 优化后的语句 show warnings;EXPLAIN 执行后&#xff0c;各列的含义 要点&#xff1a; select_type 如何查询 表type 如何查询 行key 如何使用 索引key_len 索引 使用多少rows 行 预计使用多少extra 表 的额外信息 1.id id列的编…

Moonsec_Projet_7

Moonsec_Projet_7 1、基础介绍 1.1 网络拓扑图 主机账号密码网卡IPWindows Server 2016administrator!#QWE123vmnet17(web) | vmnet18192.168.0.144(www.moonlab.com) | 10.10.1.131Windows Server 2012administrator!#QWEasdvmnet18 | vmnet1910.10.1.130 | 10.10.10.166Win…

笔记本电脑开机黑屏没反应怎么办?教你逐一排查问题

笔记本电脑是我们日常工作和学习中不可或缺的工具&#xff0c;但有时候在开机时可能会遇到黑屏无反应的问题&#xff0c;这给我们的使用带来了困扰。然而&#xff0c;不用担心&#xff0c;通常情况下&#xff0c;这种问题是可以解决的。在本文中&#xff0c;我们将介绍三种常见…

Redis入门到入坑(一)

Redis入门到入坑&#xff08;一&#xff09; Redis缓存入门简介Redis初始操作Redis数据存储操作 Redis常用数据类型简介String类型操作实践Hash类型应用实践List类型应用实践Set类型应用实践 Java中操作redis准备工作Jedis的应用快速入门实现RedisTemplate应用项目工程实践 Red…

【LeetCode: 433. 最小基因变化 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

YOLOV5 部署:cuda和cuDNN安装

1、前言 TensorRT 的安装需要配合cuda的使用,所以这里需要安装cuda和cudnn用于加速推理 TensorRT 就是神经网络专门用来加速的框架 之前训练yolov5项目的时候,我们只是配置了torch的GPU环境,没有专门安装cuda和cudnn,因为简单的训练、推理没必要cuda加速。 torch的GPU配置…

利用matplot绘制折线图(详细版-有示例数据)

对于五组数据&#xff0c;绘制折线图&#xff0c;添加有图例、不同折线的颜色等&#xff0c;如下图所示&#xff1a; python代码&#xff1a; import matplotlib.pyplot as plt import numpy as np# 定义数据 data [[1, 2, 3, 4, 5, 6, 7, 8], # 数据1[2, 2, 4, 4, 5, 5, 6,…