【WEEK4】 【DAY6】整合SSM框架之功能实现—查询特定名称的书籍功能【中文版】

2024.3.23 Saturday

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

写在前面:
这个7.8的部分编写了特别特别久,已经做出了最大的努力,但是仍然因为参考的教程在讲述过程中就有部分操作不规范和错误的实现结果,导致仍有部分功能并不完善。特别是在用户输入某些多本书的共同元素时会直接报错,而不是把符合条件的所有查询结果都列出。另外一个问题是,在没有输入任何字符(也没有输入空格)时,点击查询按钮后会产生错误。加上版本有些许不同,导致前端网页能够实现的效果有一些区别(即使是使用了class=“form-inline”,也无法实现“内联”的效果)。以下介绍已经能够实现的部分。
因为在搜查资料、迭代代码的过程中我发现了一个很大的问题:新手即使搜到了正确的解决方法,也很可能因为不知道需要添加或者移动的代码的具体位置。而且这个查询书籍功能的实现是对很多以往的文件进行修改,很难一眼找到具体位置,所以,我将这个功能将要修改的代码全部全选上传(这也是我写的每一篇博客的初衷:让和我一样的真新手能够完全明白什么应该放在哪里!)

7.8.查询特定名称的书籍功能

7.8.1.修改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>
                <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/allBook">显示全部书籍</a>
                <%--建立一个按钮--%>
            </div>
            <div class="col-md-8 column">
                <%--查询书籍--%>
                <form class="form-inline" action="${pageContext.request.contextPath}/book/queryBook" method="post" style="float: right">
                    <input type="text" name="queryBookName" class="form-control" placeholder="请输入要查询的书籍名称">
                    <input type="submit" value="查询" class="btn btn-primary">
                </form>
            </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.8.2.修改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.ArrayList;
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("/queryBook")
    public String queryBook(String queryBookName, Model model){

        Books books = bookService.queryBookByName(queryBookName);

//        数据库中查询到结果后,这个页面应该只能显示和查询相关的结果进行显示
//        System.err.println("books=>"+books);    //Server打印时会显示成红色

        ArrayList list = new ArrayList<Books>();
        list.add(books);

//        List<Books> list = new ArrayList<Books>();
//        list.addAll(books);//存储类型改为list,添加方式改为addAll即可

        if (books != null){
            model.addAttribute("list",list);    //返回前端查询
            return "allBook";  //把结果展示到allBook页面
        } else {
//            return "redirect:/book/allBook";
            return "allBook";
        }

        /*这段也可以使用,功能几乎相同
        Books book=bookService.queryBookByName(queryBookName);
        if (book==null){
            model.addAttribute("error","未找到");
            List<Books> books1=bookService.queryAllBook();
            model.addAttribute("list",books);
            return "allBook";
        }
        List<Books> books1=new ArrayList<Books>();
        books1.add(book);
        model.addAttribute("list",books1);
        return "allBook";
        */
    }
}

7.8.3.修改BookDao.java

//    新增功能
    Books queryBookByName(String bookName);

7.8.4.修改BookDao.xml

<!--根据名称查询书籍-->
<select id="queryBookByName" resultType="Books">
    SELECT * FROM ssmbuild.books WHERE bookName LIKE CONCAT('%',#{bookName},'%');
    <!--模糊查询-->
</select>

7.8.5.修改BookService.java

//    和BooDao.java相同:新增功能
Books queryBookByName(String bookName);

7.8.6.修改BookServiceImplement.java

@Override
public Books queryBookByName(String bookName) {
    return bookDao.queryBookByName(bookName);
}

7.8.7.运行

http://localhost:8080/SSMbuild_war_exploded/(主页没变化)
http://localhost:8080/SSMbuild_war_exploded/book/allBook
在这里插入图片描述

7.8.7.1.输入全名查找(以Java为例)

在这里插入图片描述
在这里插入图片描述

7.8.7.2.输入部分名字查找(以MySQL为例)

在这里插入图片描述
在这里插入图片描述

7.8.7.3.输入的字符没有对应书籍可查询(以111为例)

在这里插入图片描述
在这里插入图片描述

7.8.8.项目结构图

在这里插入图片描述
在这里插入图片描述

7.8.9.可视化布局

https://www.bootcss.com/p/layoutit/

7.8.10.访问的流程

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值