SSM功法第三层

本文说明:以下整理是基于B站上狂神说的SSM整合 视频总结而成,在狂神说公众号里有源码,我为了巩固自己这方面的知识,就手撸了一遍,并把每一步是如何执行的整合出来。
相比之前,做了如下的工作
1.首先优化了首页,使首页有一个进入图书管理系统的链接;
2.增加了页面上的增删改查的功能
废话不多说,开始整理:

1.首页的优化:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/4/5 0005
  Time: 16:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
      <style type="text/css">
          a {
              text-decoration: none;
              color: black;
              font-size: 18px;
          }
          h3 {
              width: 300px;
              height: 100px;
              position:absolute;
              left:0;
              top: 0;
              bottom: 0;
              right: 0;
              margin: auto;
              text-align: center;
              line-height: 100px;
              background: deepskyblue;
              border-radius: 20px;
          }
      </style>
  </head>
  <body>
 <h3>
   <a href="${pageContext.request.contextPath}/book/allBook">进入书籍展示页面</a>
 </h3>
  </body>
</html>

效果图如下:
在这里插入图片描述
2.点击进去,便可以查询到所有数据库的图书存储,而具体实现针对控制器的如下方法:

 //查询全部书籍
    @RequestMapping("/allBook")
    public String list(Model model) {
        List<Books> list = bookService.selectAll();
        model.addAttribute("list",list);
        return "allbook";
    }

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>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/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>
                    <small>书籍列表 —— 显示所有书籍</small>
                </h1>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-md-4 column">
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增</a>
        </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>

                <tbody>
                <c:forEach var="book" items="${list}">
                    <tr>
                        <td>${book.bookId}</td>
                        <td>${book.bookName}</td>
                        <td>${book.bookCounts}</td>
                        <td>${book.detail}</td>
                        <td>
                            <a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.bookId}">更改</a> |
                            <a href="${pageContext.request.contextPath}/book/del/${book.bookId}">删除</a>
                        </td>
                    </tr>
                </c:forEach>
                </tbody>
            </table>
        </div>
    </div>
</div>

在上述页面中有新增功能,修改功能,删除功能:

(1)新增功能

<div class="row">
        <div class="col-md-4 column">
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增</a>
        </div>
    </div>

点击新增按钮,系统会执行controller的如下方法:

@RequestMapping("/toAddBook")
    public String add() {
        return "addBook";
    }

然后跳转到addBook.jsp页面:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/4/4 0004
  Time: 17:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>新增书籍</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/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>
                    <small>新增书籍</small>
                </h1>
            </div>
        </div>
    </div>
    <form action="${pageContext.request.contextPath}/book/addBook" method="post">
        书籍名称:<input type="text" name="bookName"><br><br><br>
        书籍数量:<input type="text" name="bookCounts"><br><br><br>
        书籍详情:<input type="text" name="detail"><br><br><br>
        <input type="submit" value="添加">
    </form>

</div>
</body>
</html>

效果图如下:
在这里插入图片描述
传进来以后添加书籍名称、数量、详情,然后点击添加按钮,然后就会提交到:/book/addBook,即要执行controller的如下方法:

@RequestMapping("/addBook")
    public String addBook(Books books) {
        bookService.addBook(books);
        return "redirect:/book/allBook";
    }

然后页面会重定向到 /book/allBook页面,会把数据库中所有的数据重新展示出来

效果图:
在这里插入图片描述
至此,新增功能及展示页面就整理好了。可以看到上述页面中有更改和删除功能:
更改、删除按钮对应的脚本语言为:

<td>
  <a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.bookId}">更改</a> |
  <a href="${pageContext.request.contextPath}/book/del/${book.bookId}">删除</a>
</td>

注意:如下获取参数用了两种风格:传统风格,和restful风格。(不得不说狂神是真的牛逼呀!)
点击更改按钮,会进入:/book/toUpdateBook 相对应的会执行controller的如下方法:

//修改
    @RequestMapping("/toUpdateBook")
    public String toUpdateBook(Model model, int id) {
        Books books = bookService.selectById(id);
        model.addAttribute("book",books );
        return "updateBook";
    }

书籍根据要修改的书籍的id,找到该书的全部信息,并且将该书的信息传递给updateBook.jsp页面:

updateBook.jsp:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/4/4 0004
  Time: 17:36
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>修改信息</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/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>
                    <small>修改信息</small>
                </h1>
            </div>
        </div>
    </div>

    <form action="${pageContext.request.contextPath}/book/updateBook" method="post">
        <input type="hidden" name="bookId" value="${book.bookId}"/>
        书籍名称:<input type="text" name="bookName" value="${book.bookName}"/>
        书籍数量:<input type="text" name="bookCounts" value="${book.bookCounts}"/>
        书籍详情:<input type="text" name="detail" value="${book.detail}"/>
        <input type="submit" value="提交"/>
    </form>

</div>
</body>
</html>

然后点击提交按钮,会将信息提交到 /book/updateBook,controller会执行如下方法:

@RequestMapping("/updateBook")
    public String updateBook(Model model, Books book) {
        bookService.update(book);
       // Books books = bookService.selectById(book.getBookId());
        //model.addAttribute("books", books);
        return "redirect:/book/allBook";
    }

说明:在看公众号时,狂神有上面注释的两行代码,我想,要是返回结果时整个数据库的所有书籍,那么这两行其实不需要,而且也不能重定向到 /book/allBook" 因为该页面会使控制器查询所有书籍
如果说要单独显示修改的书籍,那就加上,并且应该以集合的形式传递给前端,而且需要重新定义方法,使只把该书的信息以集合的形式输出到前端。

就剩最后的删除功能了,加油!
当点击删除按钮的时候,系统会获取当前书籍的id,并跳转到 /book/del,然后执行controller的如下方法:

@RequestMapping("/del/{bookId}")
    public String deleteBook(@PathVariable("bookId") int id) {
        bookService.delete(id);
        return "redirect:/book/allBook";
    }

并最终跳转到查询所有书籍的页面 /book/allBook,至此,一个简单的增删改查的功能就在网页上实现了。下一层,将把拦截器加入,对网页进行进一步的优化

上面的controller的方法都是一个一个写出来,这里把完整的controller的代码附上:

package com.fei.controller;


import com.fei.pojo.Books;
import com.fei.servie.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.List;


@org.springframework.stereotype.Controller
@RequestMapping("/book")
public class Controller {
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

    public void setBookService(BookService bookService) {
        this.bookService = bookService;
    }

    //查询全部书籍
    @RequestMapping("/allBook")
    public String list(Model model) {
        List<Books> list = bookService.selectAll();
        model.addAttribute("list",list);
        return "allbook";
    }

    @RequestMapping("/toAddBook")
    public String add() {
        return "addBook";
    }
    @RequestMapping("/addBook")
    public String addBook(Books books) {
        bookService.addBook(books);
        return "redirect:/book/allBook";
    }

    //修改
    @RequestMapping("/toUpdateBook")
    public String toUpdateBook(Model model, int id) {
        Books books = bookService.selectById(id);
        model.addAttribute("book",books );
        return "updateBook";
    }
    @RequestMapping("/updateBook")
    public String updateBook(Model model, Books book) {
        bookService.update(book);
//        List<Books> list = new ArrayList<Books>();
//        Books books = bookService.selectById(book.getBookId());
//        list.add(books);
//        model.addAttribute("books", list);
        return "redirect:/book/allBook";
    }
    

    @RequestMapping("/del/{bookId}")
    public String deleteBook(@PathVariable("bookId") int id) {
        bookService.delete(id);
        return "redirect:/book/allBook";
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
在使用SSM框架中,通常会使用枚举(enum)类型来表示一些固定的常量,例如状态码、性别等。为了更好地组织代码,可以将这些枚举类型定义在一个专门的枚举层中。 在SSM框架中,可以创建一个名为“enums”的包,并在该包下创建相应的枚举类型。例如,我们可以定义一个名为“UserStatus”的枚举类型,用于表示用户的状态: ```java package com.example.enums; public enum UserStatus { NORMAL(0, "正常"), LOCKED(1, "锁定"), DELETED(2, "已删除"); private int code; private String desc; UserStatus(int code, String desc) { this.code = code; this.desc = desc; } public int getCode() { return code; } public String getDesc() { return desc; } } ``` 在上面的代码中,我们定义了三个枚举值,分别表示用户的正常状态、锁定状态和已删除状态。每个枚举值都有一个对应的代码和描述,可以通过getCode和getDesc方法获取。 在实际使用中,我们可以在Java类中引用这个枚举类型,例如: ```java package com.example.service.impl; import com.example.enums.UserStatus; import com.example.mapper.UserMapper; import com.example.model.User; import com.example.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void updateUserStatus(long userId, UserStatus status) { User user = new User(); user.setId(userId); user.setStatus(status.getCode()); userMapper.updateUser(user); } } ``` 在上面的代码中,我们将UserStatus作为参数传入updateUserStatus方法中,然后将其对应的代码存储到数据库中。这样,我们就可以通过枚举类型来表示用户的状态,而不需要使用数字或字符串等不易维护的方式了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值