1. 整合SSM框架

1.1 环境要求

环境:

  • IDEA
  • MySQL 5.7.19
  • Tomcat 9
  • Maven 3.6

要求:

  • 需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识;

1.2 项目结构图

SSM商场小项目 - 图1

SSM商场小项目 - 图2

2. 数据库环境

创建一个存放书籍数据的数据库表

  1. CREATE DATABASE `ssmbuild`;
  2. USE `ssmbuild`;
  3. DROP TABLE IF EXISTS `books`;
  4. CREATE TABLE `books` (
  5. `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
  6. `bookName` VARCHAR(100) NOT NULL COMMENT '书名',
  7. `bookCounts` INT(11) NOT NULL COMMENT '数量',
  8. `detail` VARCHAR(200) NOT NULL COMMENT '描述',
  9. KEY `bookID` (`bookID`)
  10. ) ENGINE=INNODB DEFAULT CHARSET=utf8;
  11. INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
  12. (1,'Java',1,'从入门到放弃'),
  13. (2,'MySQL',10,'从删库到跑路'),
  14. (3,'Linux',5,'从进门到进牢');

3. 基本环境搭建

3.1 新建Maven项目

新建 ssmbuild

添加web的支持

3.2 导入相关的pom依赖!

  1. <dependencies>
  2. <!--Junit-->
  3. <dependency>
  4. <groupId>junit</groupId>
  5. <artifactId>junit</artifactId>
  6. <version>4.12</version>
  7. </dependency>
  8. <!--数据库驱动-->
  9. <dependency>
  10. <groupId>mysql</groupId>
  11. <artifactId>mysql-connector-java</artifactId>
  12. <version>5.1.47</version>
  13. </dependency>
  14. <!-- 数据库连接池 -->
  15. <dependency>
  16. <groupId>com.mchange</groupId>
  17. <artifactId>c3p0</artifactId>
  18. <version>0.9.5.2</version>
  19. </dependency>
  20. <!--Servlet - JSP -->
  21. <dependency>
  22. <groupId>javax.servlet</groupId>
  23. <artifactId>servlet-api</artifactId>
  24. <version>2.5</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>javax.servlet.jsp</groupId>
  28. <artifactId>jsp-api</artifactId>
  29. <version>2.2</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>javax.servlet</groupId>
  33. <artifactId>jstl</artifactId>
  34. <version>1.2</version>
  35. </dependency>
  36. <!--Mybatis-->
  37. <dependency>
  38. <groupId>org.mybatis</groupId>
  39. <artifactId>mybatis</artifactId>
  40. <version>3.5.2</version>
  41. </dependency>
  42. <dependency>
  43. <groupId>org.mybatis</groupId>
  44. <artifactId>mybatis-spring</artifactId>
  45. <version>2.0.2</version>
  46. </dependency>
  47. <!--Spring-->
  48. <dependency>
  49. <groupId>org.springframework</groupId>
  50. <artifactId>spring-webmvc</artifactId>
  51. <version>5.1.9.RELEASE</version>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.springframework</groupId>
  55. <artifactId>spring-jdbc</artifactId>
  56. <version>5.1.9.RELEASE</version>
  57. </dependency>
  58. </dependencies>

3.3 Maven资源过滤设置

  1. <build>
  2. <resources>
  3. <resource>
  4. <directory>src/main/java</directory>
  5. <includes>
  6. <include>**/*.properties</include>
  7. <include>**/*.xml</include>
  8. </includes>
  9. <filtering>false</filtering>
  10. </resource>
  11. <resource>
  12. <directory>src/main/resources</directory>
  13. <includes>
  14. <include>**/*.properties</include>
  15. <include>**/*.xml</include>
  16. </includes>
  17. <filtering>false</filtering>
  18. </resource>
  19. </resources>
  20. </build>

3.4 建立基本结构和配置框架!

  • nuc.ss.pojo

  • nuc.ss.dao

  • nuc.ss.service

  • nuc.ss.controller

  • mybatis-config.xml ```xml <?xml version=”1.0” encoding=”UTF-8” ?> <!DOCTYPE configuration

    1. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    2. "http://mybatis.org/dtd/mybatis-3-config.dtd">

  1. -
  2. applicationContext.xml
  3. ```xml
  4. <?xml version="1.0" encoding="UTF-8"?>
  5. <beans xmlns="http://www.springframework.org/schema/beans"
  6. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd">
  9. </beans>

4. Mybatis层编写

4.1 数据库配置文件 database.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8
  3. jdbc.username=root
  4. jdbc.password=admin

4.2 IDEA关联数据库

测试查询数据库是否正常

4.3 编写MyBatis的核心配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <typeAliases>
  7. <package name="nuc.ss.pojo"/>
  8. </typeAliases>
  9. <mappers>
  10. <mapper resource="nuc/ss/dao/BookMapper.xml"/>
  11. </mappers>
  12. </configuration>

4.4 编写数据库对应的实体类

nuc.ss.pojo.Books

(使用lombok插件!)

  1. package nuc.ss.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. public class Books {
  9. private int bookID;
  10. private String bookName;
  11. private int bookCounts;
  12. private String detail;
  13. }

4.5 编写Dao层的 Mapper接口!

  1. package nuc.ss.dao;
  2. import nuc.ss.pojo.Books;
  3. import java.util.List;
  4. public interface BookMapper {
  5. //增加一个Book
  6. int addBook(Books book);
  7. //根据id删除一个Book
  8. int deleteBookById(int id);
  9. //更新Book
  10. int updateBook(Books books);
  11. //根据id查询,返回一个Book
  12. Books queryBookById(int id);
  13. //查询全部Book,返回list集合
  14. List<Books> queryAllBook();
  15. }

4.6 编写接口对应的 Mapper.xml 文件

需要导入MyBatis的包;

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="nuc.ss.dao.BookMapper">
  6. <!--增加一个Book-->
  7. <insert id="addBook" parameterType="Books">
  8. insert into ssmbuild.books(bookName,bookCounts,detail)
  9. values (#{bookName}, #{bookCounts}, #{detail})
  10. </insert>
  11. <!--根据id删除一个Book-->
  12. <delete id="deleteBookById" parameterType="int">
  13. delete from ssmbuild.books where bookID=#{bookID}
  14. </delete>
  15. <!--更新Book-->
  16. <update id="updateBook" parameterType="Books">
  17. update ssmbuild.books
  18. set bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail}
  19. where bookID = #{bookID}
  20. </update>
  21. <!--根据id查询,返回一个Book-->
  22. <select id="queryBookById" resultType="Books">
  23. select * from ssmbuild.books
  24. where bookID = #{bookID}
  25. </select>
  26. <!--查询全部Book-->
  27. <select id="queryAllBook" resultType="Books">
  28. SELECT * from ssmbuild.books
  29. </select>
  30. </mapper>

4.7 编写Service层的接口和实现类

接口:

  1. package nuc.ss.service;
  2. import nuc.ss.pojo.Books;
  3. import java.util.List;
  4. //BookService:底下需要去实现,调用dao层
  5. public interface BookService {
  6. //增加一个Book
  7. int addBook(Books book);
  8. //根据id删除一个Book
  9. int deleteBookById(int id);
  10. //更新Book
  11. int updateBook(Books books);
  12. //根据id查询,返回一个Book
  13. Books queryBookById(int id);
  14. //查询全部Book,返回list集合
  15. List<Books> queryAllBook();
  16. }

实现类:

  1. package nuc.ss.service;
  2. import nuc.ss.dao.BookMapper;
  3. import nuc.ss.pojo.Books;
  4. import java.util.List;
  5. public class BookServiceImpl implements BookService {
  6. //调用dao层的操作,设置一个set接口,方便Spring管理
  7. private BookMapper bookMapper;
  8. public void setBookMapper(BookMapper bookMapper) {
  9. this.bookMapper = bookMapper;
  10. }
  11. public int addBook(Books book) {
  12. return bookMapper.addBook(book);
  13. }
  14. public int deleteBookById(int id) {
  15. return bookMapper.deleteBookById(id);
  16. }
  17. public int updateBook(Books books) {
  18. return bookMapper.updateBook(books);
  19. }
  20. public Books queryBookById(int id) {
  21. return bookMapper.queryBookById(id);
  22. }
  23. public List<Books> queryAllBook() {
  24. return bookMapper.queryAllBook();
  25. }
  26. }

OK,到此,底层需求操作编写完毕!

5. Spring层

配置Spring整合MyBatis,我们这里数据源使用c3p0连接池;

5.1 配置spring-dao.xml

我们去编写Spring整合Mybatis的相关的配置文件;spring-dao.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. https://www.springframework.org/schema/context/spring-context.xsd">
  9. <!-- 配置整合mybatis -->
  10. <!-- 1.关联数据库文件 -->
  11. <context:property-placeholder location="classpath:database.properties"/>
  12. <!-- 2.数据库连接池 -->
  13. <!--数据库连接池
  14. dbcp 半自动化操作 不能自动连接
  15. c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)
  16. -->
  17. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  18. <!-- 配置连接池属性 -->
  19. <property name="driverClass" value="${jdbc.driver}"/>
  20. <property name="jdbcUrl" value="${jdbc.url}"/>
  21. <property name="user" value="${jdbc.username}"/>
  22. <property name="password" value="${jdbc.password}"/>
  23. <!-- c3p0连接池的私有属性 -->
  24. <property name="maxPoolSize" value="30"/>
  25. <property name="minPoolSize" value="10"/>
  26. <!-- 关闭连接后不自动commit -->
  27. <property name="autoCommitOnClose" value="false"/>
  28. <!-- 获取连接超时时间 -->
  29. <property name="checkoutTimeout" value="10000"/>
  30. <!-- 当获取连接失败重试次数 -->
  31. <property name="acquireRetryAttempts" value="2"/>
  32. </bean>
  33. <!-- 3.配置SqlSessionFactory对象 -->
  34. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  35. <!-- 注入数据库连接池 -->
  36. <property name="dataSource" ref="dataSource"/>
  37. <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
  38. <property name="configLocation" value="classpath:mybatis-config.xml"/>
  39. </bean>
  40. <!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
  41. <!--解释 :https://www.cnblogs.com/jpfss/p/7799806.html-->
  42. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  43. <!-- 注入sqlSessionFactory -->
  44. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  45. <!-- 给出需要扫描Dao接口包 -->
  46. <property name="basePackage" value="nuc.ss.dao"/>
  47. </bean>
  48. </beans>

5.2 配置spring-service.xml

Spring整合service层

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd">
  9. <!-- 扫描service相关的bean -->
  10. <context:component-scan base-package="nuc.ss.service" />
  11. <!--BookServiceImpl注入到IOC容器中-->
  12. <bean id="BookServiceImpl" class="nuc.ss.service.BookServiceImpl">
  13. <property name="bookMapper" ref="bookMapper"/>
  14. </bean>
  15. <!-- 配置事务管理器 -->
  16. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  17. <!-- 注入数据库连接池 -->
  18. <property name="dataSource" ref="dataSource" />
  19. </bean>
  20. </beans>

6. SpringMVC层

6.1 配置web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--DispatcherServlet-->
  7. <servlet>
  8. <servlet-name>DispatcherServlet</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <init-param>
  11. <param-name>contextConfigLocation</param-name>
  12. <!--一定要注意:我们这里加载的是总的配置文件,之前被这里坑了!-->
  13. <param-value>classpath:applicationContext.xml</param-value>
  14. </init-param>
  15. <load-on-startup>1</load-on-startup>
  16. </servlet>
  17. <servlet-mapping>
  18. <servlet-name>DispatcherServlet</servlet-name>
  19. <url-pattern>/</url-pattern>
  20. </servlet-mapping>
  21. <!--encodingFilter-->
  22. <filter>
  23. <filter-name>encodingFilter</filter-name>
  24. <filter-class>
  25. org.springframework.web.filter.CharacterEncodingFilter
  26. </filter-class>
  27. <init-param>
  28. <param-name>encoding</param-name>
  29. <param-value>utf-8</param-value>
  30. </init-param>
  31. </filter>
  32. <filter-mapping>
  33. <filter-name>encodingFilter</filter-name>
  34. <url-pattern>/*</url-pattern>
  35. </filter-mapping>
  36. <!--Session过期时间-->
  37. <session-config>
  38. <session-timeout>15</session-timeout>
  39. </session-config>
  40. </web-app>

6.2 配置spring-mvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/mvc
  11. https://www.springframework.org/schema/mvc/spring-mvc.xsd">
  12. <!-- 配置SpringMVC -->
  13. <!-- 1.开启SpringMVC注解驱动 -->
  14. <mvc:annotation-driven />
  15. <!-- 2.静态资源默认servlet配置-->
  16. <mvc:default-servlet-handler/>
  17. <!-- 3.配置jsp 显示ViewResolver视图解析器 -->
  18. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  19. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  20. <property name="prefix" value="/WEB-INF/jsp/" />
  21. <property name="suffix" value=".jsp" />
  22. </bean>
  23. <!-- 4.扫描web相关的bean -->
  24. <context:component-scan base-package="nuc.ss.controller" />
  25. </beans>

6.3 配置applicationContext.xml

Spring配置整合文件,applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <import resource="spring-dao.xml"/>
  7. <import resource="spring-service.xml"/>
  8. <import resource="spring-mvc.xml"/>
  9. </beans>

配置文件,暂时结束!

7. 测试Spring和Mybatis的连接

在test包中:使用Spring的bean来调用查询数据

  1. @Test
  2. public void test1(){
  3. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  4. BookService bookServiceImpl = (BookService) context.getBean("BookServiceImpl");
  5. List<Books> books = bookServiceImpl.queryAllBook();
  6. for (Books book : books) {
  7. System.out.println(book);
  8. }
  9. }

报错:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!

Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could notacquire a resource from its primary factory or source.

解决方案:

  1. 用户名密码错误,多了空格问题;
  2. 权限问题:在MySQL中使用:GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root';给予最大权限

1,驱动配置有误:driver=com.mysql.jdbc.Driver
2,数据库连接地址有误:url=jdbc:mysql://localhost:3306/test?3useUnicode=true&characterEncoding=utf8
3,密码或帐号有误:username=root password=root

(上面三条一般都写在配置文件中,如果是因为修改了配置文件后导致该错误,建议重写一遍配置文件,因为有时候开发工具就是很蛋疼,表面没有错误,程序运行却提示报错)

4,数据库未启动或无权访问

5,项目未引入对应的驱动jar包mysql-connector-java-5.1.6-bin.jar

6,mysql root没有远程访问的权限,需要增加权限,增加权限的步骤如下:
进入mysql数据库:
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

7.在普通java项目中使用 mybatis+C3p0+spring时也遇见上述问题。
问题原因是:在xml配置文件中显示声明了自动装载 <beans default-autowire="byName"> 几经折腾,把自动装载设置去掉,就没有问题了,应该使用默认的byType

参考的文章http://jyao.iteye.com/blog/1915561

8.配置tomcat导入jar包

SSM商场小项目 - 图3

9. Controller 和 视图层编写

9.1查询全部书籍

  1. BookController 类编写 , 方法一:查询全部书籍

    1. @Controller
    2. @RequestMapping("/book")
    3. public class BookController {
    4. @Autowired
    5. @Qualifier("BookServiceImpl")
    6. private BookService bookService;
    7. @RequestMapping("/allBook")
    8. public String list(Model model) {
    9. List<Books> list = bookService.queryAllBook();
    10. model.addAttribute("list", list);
    11. return "allBook";
    12. }
    13. }
  1. 编写首页 index.jsp ```jsp <%@ page language=”java” contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8” %> <!DOCTYPE HTML>

点击进入列表页

  1. 3.
  2. 书籍列表页面 **allbook.jsp**
  3. ```jsp
  4. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  5. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  6. <html>
  7. <head>
  8. <title>书籍列表</title>
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  10. <!-- 引入 Bootstrap -->
  11. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  12. </head>
  13. <body>
  14. <div class="container">
  15. <div class="row clearfix">
  16. <div class="col-md-12 column">
  17. <div class="page-header">
  18. <h1>
  19. <small>书籍列表 —— 显示所有书籍</small>
  20. </h1>
  21. </div>
  22. </div>
  23. </div>
  24. <div class="row">
  25. <div class="col-md-4 column">
  26. <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增</a>
  27. </div>
  28. </div>
  29. <div class="row clearfix">
  30. <div class="col-md-12 column">
  31. <table class="table table-hover table-striped">
  32. <thead>
  33. <tr>
  34. <th>书籍编号</th>
  35. <th>书籍名字</th>
  36. <th>书籍数量</th>
  37. <th>书籍详情</th>
  38. <th>操作</th>
  39. </tr>
  40. </thead>
  41. <tbody>
  42. <c:forEach var="book" items="${requestScope.get('list')}">
  43. <tr>
  44. <td>${book.getBookID()}</td>
  45. <td>${book.getBookName()}</td>
  46. <td>${book.getBookCounts()}</td>
  47. <td>${book.getDetail()}</td>
  48. <td>
  49. <a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.getBookID()}">更改</a> |
  50. <a href="${pageContext.request.contextPath}/book/del/${book.getBookID()}">删除</a>
  51. </td>
  52. </tr>
  53. </c:forEach>
  54. </tbody>
  55. </table>
  56. </div>
  57. </div>
  58. </div>

9.2 添加书籍

  1. BookController 类编写 , 方法二:添加书籍 ```java @RequestMapping(“/toAddBook”) public String toAddBook() { return “addBook”; }

@RequestMapping(“/addBook”) public String addBook(Books books) { System.out.println(books); bookService.addBook(books); return “redirect:/book/allBook”; // return “allBooks”; /WEB-INF/jsptest/allBooks.jsp,直接调用了allBooks.jsp页面,没有从getAllBooks方法过去,也就没有传递的book数据,会报错查不到book.bookName为空 // return “redirect:allBooks”; // 重定向到http://localhost:8080/books/allBooks,然后发起请求给对应的getAllBooks方法,最后调用allBooks.jsp页面去显示 }

  1. 2. 添加书籍页面:**addBook.jsp**
  2. ```jsp
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  5. <html>
  6. <head>
  7. <title>新增书籍</title>
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <!-- 引入 Bootstrap -->
  10. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  11. </head>
  12. <body>
  13. <div class="container">
  14. <div class="row clearfix">
  15. <div class="col-md-12 column">
  16. <div class="page-header">
  17. <h1>
  18. <small>新增书籍</small>
  19. </h1>
  20. </div>
  21. </div>
  22. </div>
  23. <form action="${pageContext.request.contextPath}/book/addBook" method="post">
  24. 书籍名称:<input type="text" name="bookName"><br><br><br>
  25. 书籍数量:<input type="text" name="bookCounts"><br><br><br>
  26. 书籍详情:<input type="text" name="detail"><br><br><br>
  27. <input type="submit" value="添加">
  28. </form>
  29. </div>

9.3 修改书籍

  1. BookController 类编写 , 方法三:修改书籍 ```java @RequestMapping(“/toUpdateBook”) public String toUpdateBook(Model model, int id) { Books books = bookService.queryBookById(id); System.out.println(books); model.addAttribute(“book”,books ); return “updateBook”; }

@RequestMapping(“/updateBook”) public String updateBook(Model model, Books book) { System.out.println(book); bookService.updateBook(book); Books books = bookService.queryBookById(book.getBookID()); model.addAttribute(“books”, books); return “redirect:/book/allBook”; }

  1. 2. 修改书籍页面 **updateBook.jsp**
  2. ```jsp
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  5. <html>
  6. <head>
  7. <title>修改信息</title>
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <!-- 引入 Bootstrap -->
  10. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  11. </head>
  12. <body>
  13. <div class="container">
  14. <div class="row clearfix">
  15. <div class="col-md-12 column">
  16. <div class="page-header">
  17. <h1>
  18. <small>修改信息</small>
  19. </h1>
  20. </div>
  21. </div>
  22. </div>
  23. <form action="${pageContext.request.contextPath}/book/updateBook" method="post">
  24. <input type="hidden" name="bookID" value="${book.getBookID()}"/>
  25. 书籍名称:<input type="text" name="bookName" value="${book.getBookName()}"/>
  26. 书籍数量:<input type="text" name="bookCounts" value="${book.getBookCounts()}"/>
  27. 书籍详情:<input type="text" name="detail" value="${book.getDetail() }"/>
  28. <input type="submit" value="提交"/>
  29. </form>
  30. </div>

9.4 删除书籍

  1. @RequestMapping("/del/{bookId}")
  2. public String deleteBook(@PathVariable("bookId") int id) {
  3. bookService.deleteBookById(id);
  4. return "redirect:/book/allBook";
  5. // return "redirect:allBooks"; 如果本来就在http://localhost:8080/books/allBooks页面,重定向刷新本页面应该使用绝对路径,否则http://localhost:8080/books/deleteBooks/allBooks
  6. }
  1. 配置Tomcat,进行运行!