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

2024.3.20 Wednesday

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

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
在这里插入图片描述
点击“删除”后在这里插入图片描述

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值