1.数据库SQL语句:
CREATE TABLE `books` (
`bookID` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书ID',
`bookName` varchar(255) NOT NULL COMMENT '图书名称',
`bookCounts` int(11) NOT NULL COMMENT '图书数量',
`detail` varchar(255) NOT NULL COMMENT '图书介绍',
PRIMARY KEY (`bookID`),
KEY `bookID` (`bookID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of books
-- ----------------------------
INSERT INTO `books` VALUES ('1', 'Java编程思想', '35', '本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。
');
INSERT INTO `books` VALUES ('6', '深入理解Java虚拟机', '47', '这是一部从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典,繁体版在台湾也颇受欢迎。自2011年上市以来,前两个版本累计印刷36次,销量超过30万册,两家主要网络书店的评论近90000条,内容上近乎零差评,是原创计算机图书领域不可逾越的丰碑。');
INSERT INTO `books` VALUES ('7', '数据结构与算法分析:Java语言描述', '88', '随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长。《数据结构与算法分析:Java语言描述(第2版)》把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。');
2.SSM测试-查询所有书籍
2.1BookController类编写
在com.wanjl.controller包中创建BookController类,并编写查询所有书籍方法:
package com.wanjl.controller;
import com.wanjl.pojo.Books;
import com.wanjl.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.RequestMapping;
import java.util.List;
/**
* @Controller :
* 用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,
* 分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。
* @RequestMapping("/book")
* 在Spring MVC 中使用@RequestMapping来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置
*
*/
@Controller
@RequestMapping("/book")
public class BookController {
/**
* @Autowired 是用在JavaBean中的注解,通过byType形式,用来给指定的字段或方法注入所需的外部资源。
*@Qualifier 使用它可以消除需要注入哪个 bean 的问题。
*/
@Autowired
@Qualifier("BookServiceImpl")
private BookService bookService;
@RequestMapping("/allBook")
public String list(Model model){
List<Books> list = bookService.queryAllBook();
model.addAttribute("list",list);
return "allBook";
}
}
2.2编写首页 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE HTML>
<html>
<head>
<title>首页</title>
<style type="text/css">
a {
text-decoration: none;
color: black;
font-size: 18px;
}
h3 {
width: 180px;
height: 38px;
margin: 100px auto;
text-align: center;
line-height: 38px;
background: deepskyblue;
border-radius: 4px;
}
</style>
</head>
<body>
<h3>
<a href="${pageContext.request.contextPath}/book/allBook">点击进入列表页</a>
</h3>
</body>
</html>
2.3书籍列表页面 allBook.jsp
在webapp下WEB-INF目录中创建jsp目录,在jsp目录中创建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-fluid">
<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="${requestScope.get('list')}">
<tr>
<td>${book.getBookID()}</td>
<td>${book.getBookName()}</td>
<td>${book.getBookCounts()}</td>
<td>${book.getDetail()}</td>
<td>
<a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.getBookID()}">更改</a> |
<a href="${pageContext.request.contextPath}/book/del/${book.getBookID()}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
2.4运行Tomcat测试,测试是否显示所有书籍信息
ps:需要在Tomcat中做如下配置,否则可能出现404错误,点击进入Tomcat设置界面:
成功查询出所有书籍信息,查询所有书籍测试成功:
3.SSM测试-添加图书
3.1编写addBook.jsp页面
在jsp目录中创建addBook.jsp文件,编写jsp页面
<%--
Created by IntelliJ IDEA.
User: 50666
Date: 2022/1/9
Time: 14:32
To change this template use File | Settings | File Templates.
--%>
<%@ 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>
<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>
3.2在controller层中BookController类中编写跳转页面的方法
/**
* 跳转页面的方法
* @return 跳转到addBook页面
*/
@RequestMapping("/toAddBook")
public String toAddPager(){
return "addBook";
}
3.3在controller层中BookController类中编写添加图书信息的方法
/**
* 添加图书信息的方法
* @param books 图书对象
* @return 重定向到显示所有图书信息页面
*/
@RequestMapping("/addBook")
public String addBook(Books books){
System.out.println(books);
bookService.addBook(books);
System.out.println(books);
return "redirect:/book/allBook";
}
4.SSM测试-修改图书
4.1编写updateBook.jsp页面
在jsp页面中创建updateBook.jsp文件,编写jsp页面
<%--
Created by IntelliJ IDEA.
User: 50666
Date: 2022/1/9
Time: 14:56
To change this template use File | Settings | File Templates.
--%>
<%@ 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>
<form action="${pageContext.request.contextPath}/book/updateBook" method="post">
<input type="hidden" name="bookID" value="${book.getBookID()}"/>
书籍名称:<input type="text" name="bookName" value="${book.getBookName()}"/>
书籍数量:<input type="text" name="bookCounts" value="${book.getBookCounts()}"/>
书籍详情:<input type="text" name="detail" value="${book.getDetail() }"/>
<input type="submit" value="提交"/>
</form>
</div>
4.2在controller层中BookController类中编写跳转页面的方法
/**
* 跳转到更新书籍页面,并根据图书id查询出图书信息并显示
* @param model
* @param id 图书id,对应着allBook.jsp中修改按钮book/toUpdateBook?id=${book.getBookID()}中的id
* @return 跳转到更新页面
*/
@RequestMapping("toUpdateBook")
public String toUpdateBook(Model model,int id){
Books book = bookService.queryBookById(id);
System.out.println(book);
model.addAttribute("book",book);
return "updateBook";
}
4.3在controller层中BookController类中编写修改图书信息的方法
/**
* 更新书籍信息,修改完图书信息后再次根据ID查询
* @param model
* @param book
* @return 重定向到书籍列表页面
*/
@RequestMapping("/updateBook")
public String updateBook(Model model,Books book){
bookService.updateBook(book);
return "redirect:/book/allBook";
}
5.SSM测试-删除图书
在controller层中BookController类中编写删除书籍的方法
/**
* 删除图书的方法
* @param id 根据ID获取书籍信息,完成删除
* @return 返回到书籍列表页面
*/
@RequestMapping("/del/{bookID}")
public String deleteBook(@PathVariable("bookID") int id){
bookService.deleteBookById(id);
return "redirect:/book/allBook";
}
增删改查功能测试结束,SSM整合框架搭建成功