java能做網(wǎng)站開發(fā)么超級推薦的關鍵詞怎么優(yōu)化
注:此為筆者學習狂神說SpringMVC的筆記,其中包含個人的筆記和理解,僅做學習筆記之用,更多詳細資訊請出門左拐B站:狂神說!!!
10、ssm整合
問了一下ChatGPT
SSM 是一個基于 Java 的開發(fā)框架整合,由 Spring、Spring MVC 和 MyBatis 三個開源框架組成。每個框架都有不同的職責和作用,通過整合,可以發(fā)揮各自的優(yōu)勢,形成一個完整的、高效的 Java 開發(fā)框架。
下面簡要解釋一下 SSM 各個組成部分的作用:
- Spring:
- 作用: 提供了一個輕量級的 IoC(控制反轉(zhuǎn))容器,用于管理應用組件的生命周期和配置。
- IoC容器: 負責創(chuàng)建對象、管理對象的依賴關系,實現(xiàn)了對象的松耦合。
- AOP(面向切面編程): 提供了面向切面編程的支持,可以方便地實現(xiàn)事務管理、日志記錄等橫切關注點。
- Spring MVC:
- 作用: 是一個基于 MVC 模式的 Web 框架,用于構(gòu)建 Web 層的應用程序。
- 控制器層: 通過控制器(Controller)處理用戶請求,將請求映射到相應的業(yè)務邏輯處理方法。
- 模型層: 通過模型(Model)將數(shù)據(jù)傳遞到視圖層,與業(yè)務邏輯進行交互。
- 視圖層: 通過視圖(View)負責渲染頁面,呈現(xiàn)給用戶。
- MyBatis:
- 作用: 是一個持久層框架,用于簡化數(shù)據(jù)庫操作和 SQL 查詢的編寫。
- ORM(對象關系映射): 將數(shù)據(jù)庫表映射為 Java 對象,通過配置文件或注解實現(xiàn)對象與數(shù)據(jù)庫表之間的映射關系。
- SQL映射: 提供了 XML 文件或注解的方式定義 SQL 查詢,可以更靈活地進行數(shù)據(jù)庫操作。
- 緩存: 支持緩存機制,提高數(shù)據(jù)庫查詢性能。
綜合起來,SSM 框架整合了 Spring 的 IoC 和 AOP 特性,Spring MVC 的 Web 層框架,以及 MyBatis 的持久層框架,使得開發(fā)者能夠更方便地進行企業(yè)級 Java 應用的開發(fā)。通過配置文件和注解,可以實現(xiàn)各層之間的松耦合,提高代碼的可維護性和可擴展性。整合后,Spring 處理業(yè)務邏輯和控制反轉(zhuǎn),Spring MVC 處理 Web 層,MyBatis 處理數(shù)據(jù)庫交互,形成一個完整的、分層清晰的應用架構(gòu)。
1、環(huán)境要求
環(huán)境:
- IDEA
- MySQL 5.7.19
- Tomcat 9
- Maven 3.6
要求:
- 需要熟練掌握MySQL數(shù)據(jù)庫,Spring,JavaWeb及MyBatis知識,簡單的前端知識;
2、數(shù)據(jù)庫環(huán)境
創(chuàng)建一個存放書籍數(shù)據(jù)的數(shù)據(jù)庫表
CREATE DATABASE `ssmbuild`;USE `ssmbuild`;DROP TABLE IF EXISTS `books`;CREATE TABLE `books` (
`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '書id',
`bookName` VARCHAR(100) NOT NULL COMMENT '書名',
`bookCounts` INT(11) NOT NULL COMMENT '數(shù)量',
`detail` VARCHAR(200) NOT NULL COMMENT '描述',
KEY `bookID` (`bookID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
(1,'Java',1,'從入門到放棄'),
(2,'MySQL',10,'從刪庫到跑路'),
(3,'Linux',5,'從進門到進牢');
3、基本環(huán)境搭建
1、新建一Maven項目!ssmbuild , 添加web的支持
2、導入相關的pom依賴!
<dependencies><!--Junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--數(shù)據(jù)庫驅(qū)動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!-- 數(shù)據(jù)庫連接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!--Servlet - JSP --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.2</version></dependency><!--Spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency>
</dependencies>
3、Maven資源過濾設置
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources>
</build>
4、建立基本結(jié)構(gòu)和配置框架!
- com.kuang.pojo
- com.kuang.dao
聲明掃描xml文件,將xml和mapper綁定起來
- com.kuang.service
- com.kuang.controller
- mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration></configuration>
- applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"></beans>
5、Mybatis層編寫
1、數(shù)據(jù)庫配置文件 database.properties
2、IDEA關聯(lián)數(shù)據(jù)庫
3、編寫MyBatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><package name="com.kuang.pojo"/></typeAliases><mappers><mapper resource="com/kuang/dao/BookMapper.xml"/></mappers></configuration>
4、編寫數(shù)據(jù)庫對應的實體類 com.kuang.pojo.Books
使用lombok插件!
package com.kuang.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {private int bookID;private String bookName;private int bookCounts;private String detail;}
5、編寫Dao層的 Mapper接口!
package com.kuang.dao;import com.kuang.pojo.Books;
import java.util.List;public interface BookMapper {//增加一個Bookint addBook(Books book);//根據(jù)id刪除一個Bookint deleteBookById(int id);//更新Bookint updateBook(Books books);//根據(jù)id查詢,返回一個BookBooks queryBookById(int id);//查詢?nèi)緽ook,返回list集合List<Books> queryAllBook();}
6、編寫接口對應的 Mapper.xml 文件。需要導入MyBatis的包;
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.kuang.dao.BookMapper"><!--增加一個Book--><insert id="addBook" parameterType="Books">insert into ssmbuild.books(bookName,bookCounts,detail)values (#{bookName}, #{bookCounts}, #{detail})</insert><!--根據(jù)id刪除一個Book--><delete id="deleteBookById" parameterType="int">delete from ssmbuild.books where bookID=#{bookID}</delete><!--更新Book--><update id="updateBook" parameterType="Books">update ssmbuild.booksset bookName = #{bookName},bookCounts = #{bookCounts},detail = #{detail}where bookID = #{bookID}</update><!--根據(jù)id查詢,返回一個Book--><select id="queryBookById" resultType="Books">select * from ssmbuild.bookswhere bookID = #{bookID}</select><!--查詢?nèi)緽ook--><select id="queryAllBook" resultType="Books">SELECT * from ssmbuild.books</select></mapper>
7、編寫Service層的接口和實現(xiàn)類
接口:
package com.kuang.service;import com.kuang.pojo.Books;import java.util.List;//BookService:底下需要去實現(xiàn),調(diào)用dao層
public interface BookService {//增加一個Bookint addBook(Books book);//根據(jù)id刪除一個Bookint deleteBookById(int id);//更新Bookint updateBook(Books books);//根據(jù)id查詢,返回一個BookBooks queryBookById(int id);//查詢?nèi)緽ook,返回list集合List<Books> queryAllBook();
}
實現(xiàn)類:
package com.kuang.service;import com.kuang.dao.BookMapper;
import com.kuang.pojo.Books;
import java.util.List;public class BookServiceImpl implements BookService {//調(diào)用dao層的操作,設置一個set接口,方便Spring管理private BookMapper bookMapper;public void setBookMapper(BookMapper bookMapper) {this.bookMapper = bookMapper;}public int addBook(Books book) {return bookMapper.addBook(book);}public int deleteBookById(int id) {return bookMapper.deleteBookById(id);}public int updateBook(Books books) {return bookMapper.updateBook(books);}public Books queryBookById(int id) {return bookMapper.queryBookById(id);}public List<Books> queryAllBook() {return bookMapper.queryAllBook();}
}
6、Spring層
1、配置Spring整合MyBatis,我們這里數(shù)據(jù)源使用c3p0連接池;
2、我們?nèi)ゾ帉慡pring整合Mybatis的相關的配置文件;spring-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置整合mybatis --><!-- 1.關聯(lián)數(shù)據(jù)庫文件 --><context:property-placeholder location="classpath:database.properties"/><!-- 2.數(shù)據(jù)庫連接池 --><!--數(shù)據(jù)庫連接池dbcp 半自動化操作 不能自動連接c3p0 自動化操作(自動的加載配置文件 并且設置到對象里面)--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 配置連接池屬性 --><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!-- c3p0連接池的私有屬性 --><property name="maxPoolSize" value="30"/><property name="minPoolSize" value="10"/><!-- 關閉連接后不自動commit --><property name="autoCommitOnClose" value="false"/><!-- 獲取連接超時時間 --><property name="checkoutTimeout" value="10000"/><!-- 當獲取連接失敗重試次數(shù) --><property name="acquireRetryAttempts" value="2"/></bean><!-- 3.配置SqlSessionFactory對象 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入數(shù)據(jù)庫連接池 --><property name="dataSource" ref="dataSource"/><!-- 配置MyBaties全局配置文件:mybatis-config.xml --><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><!-- 4.配置掃描Dao接口包,動態(tài)實現(xiàn)Dao接口注入到spring容器中 --><!--解釋 :https://www.cnblogs.com/jpfss/p/7799806.html--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 注入sqlSessionFactory --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!-- 給出需要掃描Dao接口包 --><property name="basePackage" value="com.kuang.dao"/></bean></beans>
3、Spring整合service層
理解applicationContext.xml、spring-dao、spring-service這些配置文件的關系,和融合起來的起的作用,或者直接讓spring托管就可以了
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 掃描service相關的bean --><context:component-scan base-package="com.kuang.service" /><!--BookServiceImpl注入到IOC容器中--><bean id="BookServiceImpl" class="com.kuang.service.BookServiceImpl"><property name="bookMapper" ref="bookMapper"/></bean><!-- 配置事務管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入數(shù)據(jù)庫連接池 --><property name="dataSource" ref="dataSource" /></bean></beans>
7、SpringMVC層
1、web.xml
spring-mvc.xml
dao層、service層、mvc層整合起來
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><import resource="spring-dao.xml"/><import resource="spring-service.xml"/><import resource="spring-mvc.xml"/></beans>
springmvc層的所有的請求都被這個dispatchServlet核心分發(fā)器接管了
有錯誤的:dispatchServlet綁定核心配置文件的時候,只綁定了mvc層的配置文件,dao、service層的沒有綁定起來,應該改為三層:mvc層、dao、service層都綁定給applicationContext.xml,交由spring托管的applicationContext.xml,才算把所有的bean都注入spring統(tǒng)一托管
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--DispatcherServlet--><servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><!--一定要注意:我們這里加載的是總的配置文件,之前被這里坑了!--> <param-value>classpath:applicationContext.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--encodingFilter--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--Session過期時間--><session-config><session-timeout>15</session-timeout></session-config></web-app>
2、spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 配置SpringMVC --><!-- 1.開啟SpringMVC注解驅(qū)動 --><mvc:annotation-driven /><!-- 2.靜態(tài)資源默認servlet配置--><mvc:default-servlet-handler/><!-- 3.配置jsp 顯示ViewResolver視圖解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 4.掃描web相關的bean --><context:component-scan base-package="com.kuang.controller" /></beans>
小結(jié)1
dao層、service層、mvc層這三個框架都是通過spring整合到一起的,這些都是框架的底層,以后寫輕量級項目的基礎,一定要保留下來
8、Controller 和 視圖層編寫
1、BookController 類編寫 , 方法一:查詢?nèi)繒?/h5>
簡易的的jsp頁面,先測試跳轉(zhuǎn)成功與否,再往下做
首頁使用絕對地址
2、排除bean注入的錯誤
思路:
①使用單元測試底層能否查出bean是否注入的問題
結(jié)果是可以的,因為底層applicationContext.xml把三層:dao層、service層、mvc層都注入綁定在一起了,所以說明底層沒有事,是springmvc整合出的問題
由于springmvc整合applicationContext出了問題,所以applicationContext整合三層也會出現(xiàn)bean沒法注入的問題
②真正原因:springmvc整合applicationContext出了問題
有錯誤的:dispatchServlet綁定核心上下文配置文件的時候,只綁定了mvc層的配置文件,dao、service層的沒有綁定起來,應該改為applicationContext.xml,因為三層:mvc層、dao、service層都綁定給applicationContext.xml,交由spring托管的applicationContext.xml,才算把所有的bean都注入spring統(tǒng)一托管
修改過來即可
結(jié)果:
小結(jié)2
從以上錯誤中,理解spring是如何通過綁定applicationContext.xml(綁定了三層:mvc層、dao、service層),來托管三層的,管理和注入bean的
3.編寫首頁 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>
4、 書籍列表頁面 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>書籍數(shù)量</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>
5、BookController 類編寫 , 方法二:添加書籍
@RequestMapping("/toAddBook")
public String toAddPaper() {return "addBook";
}@RequestMapping("/addBook")
public String addPaper(Books books) {System.out.println(books);bookService.addBook(books);return "redirect:/book/allBook";
}
6、 添加書籍頁面:addBook.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><form action="${pageContext.request.contextPath}/book/addBook" method="post">書籍名稱:<input type="text" name="bookName"><br><br><br>書籍數(shù)量:<input type="text" name="bookCounts"><br><br><br>書籍詳情:<input type="text" name="detail"><br><br><br><input type="submit" value="添加"></form></div>
7、BookController 類編寫 , 方法三:修改書籍
結(jié)果:
8、添加事務支持
在spring-service.xml中添加aop事務支持
導入jar包,還要往WEB-INF中導入,注意生成文件中可能沒有也會報錯
9、隱藏域ID的問題
添加隱藏域
顯而易見是sql出現(xiàn)了問題,這里可以配置日志輸出方式,讓SQL輸出日志更清晰,更容易判斷出錯的地方
10、 修改書籍頁面 updateBook.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><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()}"/>書籍數(shù)量:<input type="text" name="bookCounts" value="${book.getBookCounts()}"/>書籍詳情:<input type="text" name="detail" value="${book.getDetail() }"/><input type="submit" value="提交"/></form></div>
11、BookController 類編寫 , 方法四:刪除書籍
@RequestMapping("/del/{bookId}")
public String deleteBook(@PathVariable("bookId") int id) {bookService.deleteBookById(id);return "redirect:/book/allBook";
}
使用RestFul風格
配置Tomcat,進行運行!
到目前為止,這個SSM項目整合已經(jīng)完全的OK了,可以直接運行進行測試!這個練習十分的重要,大家需要保證,不看任何東西,自己也可以完整的實現(xiàn)出來!
12、搜索圖書
1、前端
2、controller
3、設置接口方法
4、xml配置SQL
5、添加業(yè)務
6、改進controller
7、修改前端
8、前端可視化
SpringMVC學習與開發(fā)(三)的學習筆記到此完結(jié),筆者歸納、創(chuàng)作不易,大佬們給個3連再起飛吧