javascript
SSM框架终极篇——Spring、SpringMVC、MyBatis整合练习(超级详细)
SSM框架終極篇——Spring、SpringMVC、MyBatis整合練習
一、準備工作
環境:
- 新版IDEA
- MySQL 5.7
- Tomcat 9.0.2
- Maven
要求:
- 熟練掌握MySQL數據庫
- 掌握Spring、SpringMVC、MyBatis框架知識
- 了解簡單的前端知識(JSP、BootStarp)
二、項目編寫
1.創建數據庫
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 '數量',`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,'從入門到入獄');2.新建Maven的web項目并連接數據庫
并創建相應的目錄結構
連接數據庫
3.導入MySQL驅動包、創建JDBC配置文件
在pom.xml中導入MySQL驅動依賴包
<!-- 數據庫驅動包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>在resources目錄下創建database.properties文件,寫入連接數據庫的配置信息
jdbc.Driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=1234564.編寫pojo實體類、編寫dao持久化層
實體類
package com.muhan.pojo;//實體類 public class Book {private int bookID;private String bookName;private int bookCounts;private String detail;public Book() {}public Book(int bookID, String bookName, int bookCounts, String detail) {this.bookID = bookID;this.bookName = bookName;this.bookCounts = bookCounts;this.detail = detail;}public int getBookID() {return bookID;}public void setBookID(int bookID) {this.bookID = bookID;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public int getBookCounts() {return bookCounts;}public void setBookCounts(int bookCounts) {this.bookCounts = bookCounts;}public String getDetail() {return detail;}public void setDetail(String detail) {this.detail = detail;}@Overridepublic String toString() {return "Book{" +"bookID=" + bookID +", bookName='" + bookName + '\'' +", bookCounts=" + bookCounts +", detail='" + detail + '\'' +'}';} }dao層接口
package com.muhan.dao;import com.muhan.pojo.Book;import java.util.List;//dao層接口 public interface BookDao {//增加Bookint addBook(Book book);//通過id查詢BookBook queryBookById(int id);//修改Bookint updateBook(Book book);//根據id刪除Bookint deleteBookById(int id);//查詢所有Book,返回集合List<Book> queryAllBook(); }導入MyBatis的依賴包
<!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency>編寫dao層接口對應的Mapper文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.muhan.dao.BookDao"><!--//1.增加一個book--><insert id="addBook" parameterType="Book">insert into ssmbuild.book(bookID,bookName,bookCounts,detail)values (#{bookID},#{bookName},#{bookCounts},#{detail})</insert><!--//2.通過ID刪除一個book--><delete id="deleteBookById" parameterType="Integer">delete from ssmbuild.book where bookID=#{bookID}</delete><!--//3.更改book--><update id="updateBook" parameterType="Book">update ssmbuild.bookset bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}where bookID=#{bookID}</update><!--//4.通過ID查詢book--><select id="queryBookById" resultType="Book">select * from ssmbuild.book where bookID=#{bookID}</select><!--//5.獲取所有的book--><select id="queryAllBook" resultType="Book">select * from ssmbuild.book</select></mapper>在resources目錄下新建mybatis-config.xml配置文件,配置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.muhan.pojo"/></typeAliases><!--映射BookDaoMapper.xml文件--><mappers><mapper resource="com/muhan/dao/BookDaoMapper.xml"/></mappers> </configuration>5.編寫Service層接口、接口實現類
編寫Service接口
package com.muhan.service;import com.muhan.pojo.Book;import java.util.List;//service層接口 public interface BookService {//增加Bookint addBook(Book book);//通過id查詢BookBook queryBookById(Integer id);//修改Bookint updateBook(Book book);//根據id刪除Bookint deleteBookById(Integer id);//查詢所有Book,返回集合List<Book> queryAllBook(); }編寫Service接口實現類
package com.muhan.service;import com.muhan.dao.BookDao; import com.muhan.pojo.Book;import java.util.List;//Service層接口實現類,調用dao層 public class BookServiceImpl implements BookService {//將BookDao組合進來private BookDao bookDao;//設置一個set方法接口,方斌Spring管理public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}//增加Book@Overridepublic int addBook(Book book) {return bookDao.addBook(book);}//通過id查詢Book@Overridepublic Book queryBookById(Integer id) {return bookDao.queryBookById(id);}//修改Book@Overridepublic int updateBook(Book book) {return bookDao.updateBook(book);}//根據id刪除Book@Overridepublic int deleteBookById(Integer id) {return bookDao.deleteBookById(id);}//查詢所有Book,返回集合@Overridepublic List<Book> queryAllBook() {return bookDao.queryAllBook();} }6.配置Spring整合MyBtis(dao層)
我們這里使用c3p0連接池,導入依賴包
<!-- 數據庫連接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency>再導入mybatis-spring的依賴包、Spring相關包(spring-web、spring-jdbc)
<!-- mybatis-spring整合包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!--Spring相關包--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.24.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.24.RELEASE</version></dependency>Spring整合MyBatis,在resources目錄下新建spring目錄,并在該目錄下新建spring-dao.xml文件,用來配置spring整合mybatis
<?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"><!--配置Spring整合Mybatis--><!--1.掃描包--><context:component-scan base-package="com.muhan.dao"/><!--2.關聯數據庫文件--><context:property-placeholder location="classpath:database.properties"/><!--3.數據庫連接池--><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="5"/> <!--最小連接數--><property name="autoCommitOnClose" value="false"/><!-- 關閉連接后不自動commit --><property name="checkoutTimeout" value="10000"/> <!-- 獲取連接超時時間 --><property name="acquireRetryAttempts" value="2"/><!-- 當獲取連接失敗重試次數 --></bean><!--4.配置sqlSessionFactory對象:SqlSessionFactoryBean--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--注入數據庫連接池--><property name="dataSource" ref="dataSource"/><!--配置mybatis全局配置文件:mybatis-config.xml--><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><!--5.掃描dao接口包,動態實現dao接口注入到spring中--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--注入sqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--給出需要掃描的dao接口包--><property name="basePackage" value="com.muhan.dao"/></bean> </beans>6.配置Spring整合Service層
在resources/spring目錄下新建spring-service.xml配置文件,并編寫整合servcie層的配置
<?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"><!--掃描servcie相關的包--><context:component-scan base-package="com.muhan.service"/><!--將service層的接口是實現類注入到Spring的IOC容器中--><bean id="BookServiceImpl" class="com.muhan.service.BookServiceImpl"><property name="bookDao" ref="bookDao"/></bean><!--配置事務管理--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean></beans>7.配置SpringMVC
首先導入springmvc的三個包:jsp,jstl,servlet
<!--servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version></dependency><!--jsp--><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><!--jstl--><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>配置web.xml,在web.xml中配置DispatcherServlet以及過濾器
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><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:application.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><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></web-app>在resources/spring下新建spring-mvc.xml配置文件,用來配置springmvc
<?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/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--springmvc配置--><!--1.掃描包--><context:component-scan base-package="com.muhan.controller"/><!--2.靜態資源過濾(1)加入對靜態資源的處理:js,gif,png(2)允許使用"/"做整體映射--><mvc:default-servlet-handler/><!--3.配置注解驅動--><mvc:annotation-driven/><!--4.配置視圖解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><!--配置前綴--><property name="prefix" value="/WEN-INF/jsp/"/><!--配置后綴--><property name="suffix" value=".jsp"/></bean></beans>8.Spring整合配置文件
在resources目錄下新建一個application.xml文件,將spring目錄下的三個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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--整合導入三個spring配置文件--><import resource="spring/spring-dao.xml"/><import resource="spring/spring-service.xml"/><import resource="spring/spring-mvc.xml"/></beans>9.編寫Controller
package com.muhan.controller;import com.muhan.pojo.Book; import com.muhan.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.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;import java.util.List;@Controller @RequestMapping("/book") public class UserController {@Autowired@Qualifier("BookServiceImpl")private BookService bookService;@RequestMapping("/allBook")public String list(Model model) {System.out.println("allBook進來了---------------------------------");List<Book> list = bookService.queryAllBook();model.addAttribute("list",list);return "allBook";}@RequestMapping("/toAddBook")public String toAddBook() {return "addBook";}@RequestMapping("/addBook")public String addBook(Book book){System.out.println("添加的書:---------------->"+book);bookService.addBook(book);return "redirect:/book/allBook";//重定向到allBook頁面}@RequestMapping("/toUpdateBook")public String toUpdateBook(Model model,Integer id){Book book = bookService.queryBookById(id);System.out.println("展示要修改的書:---------------->"+book);model.addAttribute("book",book);return "updateBook";}@RequestMapping("/updateBook")public String updateBook(Model model,Book book){System.out.println("要修改的書:---------------->"+book);bookService.updateBook(book);Book book1 = bookService.queryBookById(book.getBookID());model.addAttribute("book",book1);System.out.println("修改后的書籍===="+book1);return "redirect:/book/allBook";//重定向到allBook頁面}@RequestMapping("/del/{bookID}")public String deleteBook(@PathVariable("bookID") Integer id){bookService.deleteBookById(id);return "redirect:/book/allBook";//重定向到allBook頁面} }10.處理資源導出問題
在pom.xml里的build里面配置
<resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>false</filtering></resource></resources>11.前端視圖層
首頁index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>首頁</title><style>body{text-align: center;line-height: 500PX;text-align: center;}div{width: 200px;height: 200px;text-align: center;line-height: 200PX;background: aquamarine;border-radius: 100px;}a{font-size: 25px;color: black;text-decoration: none;}</style> </head> <body><div><a href="${pageContext.request.contextPath}/book/allBook">點擊查看列表</a> </div></body> </html>在WEB-INF目錄下新建jsp目錄,并將以下的頁面放在該目錄下
增加書籍頁面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>書籍數量:<input type="text" name="bookCounts"><br><br><br>書籍詳情:<input type="text" name="detail"><br><br><br><input type="submit" value="添加"></form></div>書籍列表頁面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="${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>修改書籍信息頁面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()}"/>書籍數量:<input type="text" name="bookCounts" value="${book.getBookCounts()}"/>書籍詳情:<input type="text" name="detail" value="${book.getDetail() }"/><input type="submit" value="提交"/></form></div>12.配置Tomcat
13.項目結構
14.測試
運行tomcat測試
點擊查看列表
點擊新增按鈕,新增書籍
新增后,自動返回列表頁面,我們發現新增的數據已經填加上了
再去數據庫查看
我們修改信息,點擊提交后會自動返回列表頁面
發現數據已經更改
在數據庫中查看,發現已經更新數據
然后我們點擊刪除,發現已經刪除
總結
以上是生活随笔為你收集整理的SSM框架终极篇——Spring、SpringMVC、MyBatis整合练习(超级详细)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pastiche Master: Exe
- 下一篇: MacOS上使用ffmpeg利用显卡加速