• SpringMVC07、整合SSM


    7、整合SSM

    7.1、环境要求

    环境:

    • IDEA
    • MySQL 5.7.19
    • Tomcat 9
    • Maven 3.6

      要求:

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

    7.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,'从进门到进牢');

    7.3、基本环境搭建

    1. 新建一Maven项目! ssmbuild , 添加web的支持

    2. 导入相关的pom依赖!

    1. <dependencies>
    2. <dependency>
    3. <groupId>junitgroupId>
    4. <artifactId>junitartifactId>
    5. <version>4.12version>
    6. dependency>
    7. <dependency>
    8. <groupId>mysqlgroupId>
    9. <artifactId>mysql-connector-javaartifactId>
    10. <version>5.1.47version>
    11. dependency>
    12. <dependency>
    13. <groupId>com.mchangegroupId>
    14. <artifactId>c3p0artifactId>
    15. <version>0.9.5.2version>
    16. dependency>
    17. <dependency>
    18. <groupId>javax.servletgroupId>
    19. <artifactId>servlet-apiartifactId>
    20. <version>2.5version>
    21. dependency>
    22. <dependency>
    23. <groupId>javax.servlet.jspgroupId>
    24. <artifactId>jsp-apiartifactId>
    25. <version>2.2version>
    26. dependency>
    27. <dependency>
    28. <groupId>javax.servletgroupId>
    29. <artifactId>jstlartifactId>
    30. <version>1.2version>
    31. dependency>
    32. <dependency>
    33. <groupId>org.mybatisgroupId>
    34. <artifactId>mybatisartifactId>
    35. <version>3.5.2version>
    36. dependency>
    37. <dependency>
    38. <groupId>org.mybatisgroupId>
    39. <artifactId>mybatis-springartifactId>
    40. <version>2.0.2version>
    41. dependency>
    42. <dependency>
    43. <groupId>org.springframeworkgroupId>
    44. <artifactId>spring-webmvcartifactId>
    45. <version>5.1.9.RELEASEversion>
    46. dependency>
    47. <dependency>
    48. <groupId>org.springframeworkgroupId>
    49. <artifactId>spring-jdbcartifactId>
    50. <version>5.1.9.RELEASEversion>
    51. dependency>
    52. dependencies>

    Maven资源过滤设置

    1. <build>
    2. <resources>
    3. <resource>
    4. <directory>src/main/javadirectory>
    5. <includes>
    6. <include>**/*.propertiesinclude>
    7. <include>**/*.xmlinclude>
    8. includes>
    9. <filtering>falsefiltering>
    10. resource>
    11. <resource>
    12. <directory>src/main/resourcesdirectory>
    13. <includes>
    14. <include>**/*.propertiesinclude>
    15. <include>**/*.xmlinclude>
    16. includes>
    17. <filtering>falsefiltering>
    18. resource>
    19. resources>
    20. build>

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

    • com.kuang.pojo

    • com.kuang.dao

    • com.kuang.service

    • com.kuang.controller

    • mybatis-config.xml

    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. configuration>

    applicationContext.xml

    1. "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. beans>

    7.4、Mybatis层编写

    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=123456
    1. IDEA关联数据库

    2. 编写MyBatis的核心配置文件

    1. "1.0" encoding="UTF-8" ?>
    2. 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="com.kuang.pojo"/>
    8. typeAliases>
    9. <mappers>
    10. <mapper resource="com/kuang/dao/BookMapper.xml"/>
    11. mappers>
    12. configuration>

    编写数据库对应的实体类 com.kuang.pojo.Books

    使用lombok插件!

    1. package com.kuang.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. }

    编写Dao层的 Mapper接口!

    1. package com.kuang.dao;
    2. import com.kuang.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 queryAllBook();
    15. }

    编写接口对应的 Mapper.xml 文件。需要导入MyBatis的包;

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.kuang.dao.BookMapper">
    6. <insert id="addBook" parameterType="Books">
    7. insert into ssmbuild.books(bookName,bookCounts,detail)
    8. values (#{bookName}, #{bookCounts}, #{detail})
    9. insert>
    10. <delete id="deleteBookById" parameterType="int">
    11. delete from ssmbuild.books where bookID=#{bookID}
    12. delete>
    13. <update id="updateBook" parameterType="Books">
    14. update ssmbuild.books
    15. set bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail}
    16. where bookID = #{bookID}
    17. update>
    18. <select id="queryBookById" resultType="Books">
    19. select * from ssmbuild.books
    20. where bookID = #{bookID}
    21. select>
    22. <select id="queryAllBook" resultType="Books">
    23. SELECT * from ssmbuild.books
    24. select>
    25. mapper>

    编写Service层的接口和实现类

    接口:

    1. package com.kuang.service;
    2. import com.kuang.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 queryAllBook();
    16. }

    实现类:

    1. package com.kuang.service;
    2. import com.kuang.dao.BookMapper;
    3. import com.kuang.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 queryAllBook() {
    24. return bookMapper.queryAllBook();
    25. }
    26. }

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

    7.5、Spring层

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

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

    1. "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. <context:property-placeholder location="classpath:database.properties"/>
    10. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    11. <property name="driverClass" value="${jdbc.driver}"/>
    12. <property name="jdbcUrl" value="${jdbc.url}"/>
    13. <property name="user" value="${jdbc.username}"/>
    14. <property name="password" value="${jdbc.password}"/>
    15. <property name="maxPoolSize" value="30"/>
    16. <property name="minPoolSize" value="10"/>
    17. <property name="autoCommitOnClose" value="false"/>
    18. <property name="checkoutTimeout" value="10000"/>
    19. <property name="acquireRetryAttempts" value="2"/>
    20. bean>
    21. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    22. <property name="dataSource" ref="dataSource"/>
    23. <property name="configLocation" value="classpath:mybatis-config.xml"/>
    24. bean>
    25. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    26. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    27. <property name="basePackage" value="com.kuang.dao"/>
    28. bean>
    29. beans>

    Spring整合service层

    1. "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. <context:component-scan base-package="com.kuang.service" />
    10. <bean id="BookServiceImpl" class="com.kuang.service.BookServiceImpl">
    11. <property name="bookMapper" ref="bookMapper"/>
    12. bean>
    13. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    14. <property name="dataSource" ref="dataSource" />
    15. bean>
    16. beans>

    Spring层搞定!再次理解一下,Spring就是一个大杂烩,一个容器!对吧!

    7.6、SpringMVC层

    1. web.xml

    1. "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. <servlet>
    7. <servlet-name>DispatcherServletservlet-name>
    8. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    9. <init-param>
    10. <param-name>contextConfigLocationparam-name>
    11. <param-value>classpath:applicationContext.xmlparam-value>
    12. init-param>
    13. <load-on-startup>1load-on-startup>
    14. servlet>
    15. <servlet-mapping>
    16. <servlet-name>DispatcherServletservlet-name>
    17. <url-pattern>/url-pattern>
    18. servlet-mapping>
    19. <filter>
    20. <filter-name>encodingFilterfilter-name>
    21. <filter-class>
    22. org.springframework.web.filter.CharacterEncodingFilter
    23. filter-class>
    24. <init-param>
    25. <param-name>encodingparam-name>
    26. <param-value>utf-8param-value>
    27. init-param>
    28. filter>
    29. <filter-mapping>
    30. <filter-name>encodingFilterfilter-name>
    31. <url-pattern>/*url-pattern>
    32. filter-mapping>
    33. <session-config>
    34. <session-timeout>15session-timeout>
    35. session-config>
    36. web-app>

    spring-mvc.xml

    1. "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. <mvc:annotation-driven />
    13. <mvc:default-servlet-handler/>
    14. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    15. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    16. <property name="prefix" value="/WEB-INF/jsp/" />
    17. <property name="suffix" value=".jsp" />
    18. bean>
    19. <context:component-scan base-package="com.kuang.controller" />
    20. beans>

    Spring配置整合文件,applicationContext.xml

    1. "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>

    配置文件,暂时结束!Controller 和 视图层编写

    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 list = bookService.queryAllBook();
    10. model.addAttribute("list", list);
    11. return "allBook";
    12. }
    13. }

    编写首页 index.jsp

    1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    2. HTML>
    3. <html>
    4. <head>
    5. <title>首页title>
    6. <style type="text/css">
    7. a {
    8. text-decoration: none;
    9. color: black;
    10. font-size: 18px;
    11. }
    12. h3 {
    13. width: 180px;
    14. height: 38px;
    15. margin: 100px auto;
    16. text-align: center;
    17. line-height: 38px;
    18. background: deepskyblue;
    19. border-radius: 4px;
    20. }
    21. style>
    22. head>
    23. <body>
    24. <h3>
    25. <a href="${pageContext.request.contextPath}/book/allBook">点击进入列表页a>
    26. h3>
    27. body>
    28. html>

    书籍列表页面 allbook.jsp

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

    BookController 类编写 , 方法二:添加书籍

    1. @RequestMapping("/toAddBook")
    2. public String toAddPaper() {
    3. return "addBook";
    4. }
    5. @RequestMapping("/addBook")
    6. public String addPaper(Books books) {
    7. System.out.println(books);
    8. bookService.addBook(books);
    9. return "redirect:/book/allBook";
    10. }

    添加书籍页面:addBook.jsp

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

    BookController 类编写 , 方法三:修改书籍

    1. @RequestMapping("/toUpdateBook")
    2. public String toUpdateBook(Model model, int id) {
    3. Books books = bookService.queryBookById(id);
    4. System.out.println(books);
    5. model.addAttribute("book",books );
    6. return "updateBook";
    7. }
    8. @RequestMapping("/updateBook")
    9. public String updateBook(Model model, Books book) {
    10. System.out.println(book);
    11. bookService.updateBook(book);
    12. Books books = bookService.queryBookById(book.getBookID());
    13. model.addAttribute("books", books);
    14. return "redirect:/book/allBook";
    15. }

    修改书籍页面 updateBook.jsp

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

    BookController 类编写 , 方法四:删除书籍

    1. @RequestMapping("/del/{bookId}")
    2. public String deleteBook(@PathVariable("bookId") int id) {
    3. bookService.deleteBookById(id);
    4. return "redirect:/book/allBook";
    5. }

    配置Tomcat,进行运行!

    到目前为止,这个SSM项目整合已经完全的OK了,可以直接运行进行测试!这个练习十分的重要,大家需要保证,不看任何东西,自己也可以完整的实现出来!

    项目结构图

    7.7、小结及展望

    这个是同学们的第一个SSM整合案例,一定要烂熟于心!

    SSM框架的重要程度是不言而喻的,学到这里,大家已经可以进行基本网站的单独开发。但是这只是增删改查的基本操作。可以说学到这里,大家才算是真正的步入了后台开发的门。也就是能找一个后台相关工作的底线。

    或许很多人,工作就做这些事情,但是对于个人的提高来说,还远远不够!

    我们后面还要学习一些 SpringMVC 的知识!

    • Ajax 和 Json
    • 文件上传和下载
    • 拦截器

    SpringBoot、SpringCloud开发!

    7.8、实现查询书籍功能

    1. 前端页面增加一个输入框和查询按钮

    1. <div class="col-md-4 column">div>
    2. <div class="col-md-4 column">
    3. <form class="form-inline" action="/book/queryBook" method="post" style="float: right">
    4. <input type="text" name="queryBookName" class="form-control" placeholder="输入查询书名" required>
    5. <input type="submit" value="查询" class="btn btn-primary">
    6. form>
    7. div>

    编写查询的Controller

    1. @RequestMapping("/queryBook")
    2. public String queryBook(String queryBookName,Model model){
    3. System.out.println("要查询的书籍:"+queryBookName);
    4. //业务逻辑还没有写
    5. return "allBook";
    6. }
    1. 由于底层没有实现,所以我们要将底层代码先搞定

    2. Mapper接口

    //根据id查询,返回一个Book
    Books queryBookByName(String bookName);

    Mapper.xml

    
    
    

    Service接口

    //根据id查询,返回一个Book
    Books queryBookByName(String bookName);
    

    完善Controller

    1. @RequestMapping("/queryBook")
    2. public String queryBook(String queryBookName,Model model){
    3. System.out.println("要查询的书籍:"+queryBookName);
    4. Books books = bookService.queryBookByName(queryBookName);
    5. List list = new ArrayList();
    6. list.add(books);
    7. model.addAttribute("list", list);
    8. return "allBook";
    9. }
    1. 测试,查询功能OK!

    2. 无聊优化!我们发现查询的东西不存在的时候,查出来的页面是空的,我们可以提高一下用户的体验性!

      1. 在前端添加一个展示全部书籍的按钮

    1. 2. 并在后台增加一些判断性的代码!
    2. ```java
    3. @RequestMapping("/queryBook")
    4. public String queryBook(String queryBookName,Model model){
    5. System.out.println("要查询的书籍:"+queryBookName);
    6. //如果查询的数据存在空格,则优化
    7. Books books = bookService.queryBookByName(queryBookName.trim());
    8. List list = new ArrayList();
    9. list.add(books);
    10. //如果没有查出来书籍,则返回全部书籍列表
    11. if (books==null){
    12. list = bookService.queryAllBook();
    13. model.addAttribute("error", "没有找到本书!");
    14. }
    15. model.addAttribute("list", list);
    16. return "allBook";
    17. }
    18. ```
    19. 3. 将错误信息展示在前台页面!完整的查询栏代码
    20. ```jsp
    21. "row">
    22. "col-md-4 column">
  • "col-md-8 column">
  • "form-inline" action="/book/queryBook" method="post" style="float: right">
  • "color:red;font-weight: bold">${error}
  • "text" name="queryBookName" class="form-control" placeholder="输入查询书名" required>
  • "submit" value="查询" class="btn btn-primary">
  • 相关阅读:
    【JavaWeb】JSP技术详解
    算法leetcode|83. 删除排序链表中的重复元素(rust重拳出击)
    拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)
    【web课程设计网页规划与设计】基于HTML+CSS+JavaScript火车票网上预订系统网站(4个页面)
    thinkCMF6 更改站点信息注意事项
    后端关卡17 初识MySQL数据库
    mysql回表查询和索引覆盖
    OpenAI开发系列(二):大语言模型发展史及Transformer架构详解
    3分钟整明白啥是 缓存雪崩
    Windows服务器配置证书
  • 原文地址:https://blog.csdn.net/mnn12/article/details/136584705