🏇 小 木 來 了 \textcolor{Orange}{小木來了} 小木來了
🍣 沒 有 太 多 的 話 語 , 但 是 勝 似 有 話 , \textcolor{green}{沒有太多的話語,但是勝似有話,} 沒有太多的話語,但是勝似有話, 希 望 在 b l i n k 發 表 的 可 以 成 真 \textcolor{red}{希望在blink發表的可以成真} 希望在blink發表的可以成真🍣
🍣 這 里 僅 提 供 一 個 S S M 模 板 , \textcolor{green}{這里僅提供一個SSM模板,} 這里僅提供一個SSM模板, 讓 你 不 再 為 了 環 境 發 愁 , 更 大 的 精 力 在 業 務 邏 輯 上 \textcolor{red}{讓你不再為了環境發愁,更大的精力在業務邏輯上} 讓你不再為了環境發愁,更大的精力在業務邏輯上🍣
🙏 博 主 也 在 學 習 階 段 , 如 若 發 現 問 題 , 請 告 知 , 非 常 感 謝 \textcolor{Orange}{博主也在學習階段,如若發現問題,請告知,非常感謝} 博主也在學習階段,如若發現問題,請告知,非常感謝💗
歡迎各位小伙伴😄關注👍點贊??收藏📝留言
| 如果想要模板可以在資源中自取,也可以評論留言我發你🤭 |
SSM框架搭建
- 一、環境搭建
- 1、資料庫
- 2、基本環境搭建
- 二、Mybatis層
- 1、連接資料庫
- 2、創建物體類
- 3、介面
- 4、業務層
- 三、Spring層
- 1.spring-dao.xml
- 2.spring-service.xml
- 3.解決組態檔不在一塊的情況
- 4.業務類注入到Spring
- 四、SpringMVC
- 1.添加web支持
- 2.web.xml
- 3.spring-mvc.xml
- 4. Spring整合組態檔
- 5.xml中檔案宣告
- 五、配置tomcat
- 六、遇到的問題
- 1.專案無法部署
- 2.資料庫連接錯誤c3p0
- 3.組態檔
- 七、查詢全部的書籍
- 八、增加書籍
- 九、修改洗掉書籍
- 添加日志功能
- 十、查詢框
一、環境搭建
- IDEA
- MySQL 8.0.26
- Tomcat 9.0.31
- Maven 3.8.2
1、資料庫
CREATE DATABASE `wmmbooks`;
USE `wmmbooks`;
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=utf8
INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
(1,'Java',1,'從入門到放棄'),
(2,'MySQL',10,'從刪庫到跑路'),
(3,'Linux',5,'從進門到進牢');

2、基本環境搭建
2.1新建一個普通的maven專案,wmmbooks,
2.2匯入相關的依賴
maven倉庫
<!--依賴:junit,資料庫驅動,連接池,servlet,jsp,mybatis,mybatis-spring,spring-->
<dependencies>
<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--資料庫驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- 資料庫連接池:c3p0 之前 用過dbcp-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!--Servlet - JSP -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--Mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
<!--靜態資源匯出問題-->
<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>
2.3連接資料庫
2.4建立基本的架構和配置框架
-
com.hxl.dao
-
com.hxl.pojo
-
com.hxl.service
-
com.hxl.controller
-
com.hxl.utils
-
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
-
二、Mybatis層
1、連接資料庫
1.1創建database.properties
我用的是mysql8.0,連接出錯的話需要增加一個時區的配置&serverTimezone=Asia/Tianjin
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/wmmbooks?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true
user=root
password=123456
2、創建物體類
package com.hxl.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;
}
記得匯入lombok的包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
3、介面
package com.hxl.dao;
import com.hxl.pojo.Books;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface BookMapper {
//增加
int addBook(Books books);
//洗掉
int deleteBookById(@Param("bookId")int id);
//更新
int updateBook(Books books);
//查詢一本書
Books queryBookById(int id);
//查詢全部的書
List<Books> queryAllBook();
}
BookMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hxl.dao.BookMapper">
<insert id="addBook" parameterType="Books">
insert into wmmbooks.books (bookName,bookCounts,detail)
values (#{bookName},#{bookCounts},#{detail})
</insert>
<!--這里寫int是Integer,寫_int才是int,但是java里可以轉換,自動拆箱和裝箱-->
<!--這里寫bookId是因為在介面中使用了@Param這個注解,否則需要寫id-->
<delete id="deleteBookById" parameterType="int">
delete from wmmbooks.books where bookID = #{bookId}
</delete>
<update id="updateBook" parameterType="Books">
update wmmbooks.books
set bookName = #{bookName}, bookCounts=#{bookCounts},detail=#{detail}
where bookID = #{bookID}
</update>
<select id="queryBookById" parameterType="Books">
select * from wmmbooks.books where bookID = #{bookID}
</select>
<select id="queryAllBook" parameterType="Books">
select * from wmmbooks.books
</select>
</mapper>
寫完就需要立馬系結到mybatis組態檔中
<mappers>
<mapper class="com.hxl.dao.BookMapper"/>
</mappers>
4、業務層
BookService
package com.hxl.service;
import com.hxl.pojo.Books;
import java.util.List;
public interface BookService {
//增加
int addBook(Books books);
//洗掉
int deleteBookById(int id);
//更新
int updateBook(Books books);
//查詢一本書
Books queryBookById(int id);
//查詢全部的書
List<Books> queryAllBook();
}
寫完去寫它的實作類BookServiceImpl
package com.hxl.service;
import com.hxl.dao.BookMapper;
import com.hxl.pojo.Books;
import java.util.List;
public class BookServiceImpl implements BookService{
//service調dao層,組合Dao
private BookMapper bookMapper;
//給它來個set方法,這樣spring就可以托管它了
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
public int addBook(Books books) {
return bookMapper.addBook(books);
}
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();
}
}
三、Spring層
1.spring-dao.xml
Spring整合Mybatis的相關組態檔;整合dao層
<?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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--1.關聯資料庫組態檔-->
<context:property-placeholder location="classpath:database.properties"/>
<!--2.連接池
dbcp:半自動化操作,不能自動連接
c3p0:自動化操作,可以自動化的加載組態檔,并且可以自動設定到物件中
druid:
hikari:
-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
<!-- c3p0連接池的私有屬性 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- 關閉連接后不自動commit -->
<property name="autoCommitOnClose" value="false"/>
<!-- 獲取連接超時時間 -->
<property name="checkoutTimeout" value="10000"/>
<!-- 當獲取連接失敗重試次數 -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!--3.sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--系結Mybatis的組態檔-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--4.配置dao介面掃描包,動態的實作了Dao介面可以注入到Spring容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--要掃描的dao包-->
<property name="basePackage" value="com.hxl.dao"/>
</bean>
</beans>
- 連接池
- dbcp:半自動化操作,不能自動連接
- c3p0:自動化操作,可以自動化的加載組態檔,并且可以自動設定到物件中
- druid: hikari:

掃描上面的Factory,動態的掃描到beanName中
2.spring-service.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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--1.掃描service下的包-->
<context:component-scan base-package="com.hxl.service"/>
<!--2.將我們的所有業務類,注入到SpringIOC容器中,可以通過配置或者注解實作-->
<bean id="BookServiceImpl" class="com.hxl.service.BookServiceImpl">
<property name="bookMapper" ref="bookMapper"/>
</bean>
<!--3.宣告式事務配置-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入資料源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--4.aop事務支持-->
</beans>
要用aop事務支持的話需要匯入一個AOP的織入包aspectjweaver
3.解決組態檔不在一塊的情況
這里要保證他們在一塊,否則是整合不了的;

圈中的地方匯報紅,就證明沒有整合到一塊,
解決爆紅的方式有兩種
1.通過idea,讓他們在同一個背景關系中,module中使他們都在一個application下

2.通過import引入進來

<import resource="classpath:spring-service.xml"/>
3.可以在applicationContext中增加
<import resource="classpath:spring-dao.xml"/>
<import resource="classpath:spring-service.xml"/>
4.業務類注入到Spring
可以通過配置spring-service.xml
<bean id="BookServiceImpl" class="com.hxl.service.BookServiceImpl">
<property name="bookMapper" ref="bookMapper"/>
</bean>
注解實作

四、SpringMVC
1.添加web支持
2.web.xml
<?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">
<!--DispatchServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--和tomcat一塊啟動-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</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>
<!--Session過期時間-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>
3.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--1.注解驅動-->
<mvc:annotation-driven/>
<!--2.靜態資源過濾-->
<mvc:default-servlet-handler/>
<!--3.掃描包:controller-->
<context:component-scan base-package="com.hxl.controller"/>
<!--4.視圖決議器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
此時就需要把框架完整起來

4. 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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="classpath:spring-dao.xml"/>
<import resource="classpath:spring-service.xml"/>
<import resource="classpath:spring-mvc.xml"/>
</beans>
5.xml中檔案宣告

有可能自動生成的是錯誤的,需要我們進行修改,將cache修改成mvc
五、配置tomcat
不再贅述,啟動測驗
至此SSM框架就整合完畢了,此時我們可以把這塊部分留存下來,以后做專案的時候就可以套用,
六、遇到的問題
1.專案無法部署
Artifact wmmbooks:war exploded: Error during artifact deployment. See server

解決辦法:
右鍵點擊把jar包導進去

2.資料庫連接錯誤c3p0
檢查資料庫db.properties
-
java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
- 只要在url的后邊加上allowPublicKeyRetrieval=true
-
java.sql.SQLException: Access denied for user ‘Administrator’@‘localhost’
- 有可能是username和系統的出現了沖突,修改為user解決,
-
8.0以后的資料庫連接要加.cj,5.0的不用加
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/wmmbooks?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true -
也有可能是useSSL=true,修改為false就好,
-
serverTimezone=UTC,時區問題,有的是GMT
-
ORG.MYBATIS.SPRING.MYBATISSYSTEMEXCEPTION: NESTED EXCEPTION IS ORG.APACHE.IBATIS.EXCEPTIONS
- 這個問題就是你的資料庫操作寫錯了,可能是引數型別和結果型別寫錯了

3.組態檔

它說沒有找到這個bookService,我們可以根據下面的思路來一步步進行
排錯思路(重要)
問題是:bean不存在
步驟:
-
查看這個bean注入是否成功

-
Junit單元測驗,看代碼是否能否查詢出來結果

-
問題不在底層,那就是spring出現了問題
-
SpringMVC在整合的時候沒呼叫到我們的service層的bean;
-
applicationContextxml中沒有注入bean
-
web.xml中我們也系結過組態檔,發現問題,我們配置的是spring-mvc.xml,這里確實沒有service bean,所以報錯

-
至此找到問題,可以跳轉,剩下的就是優化,
七、查詢全部的書籍
1.BookController
package com.hxl.controller;
import com.hxl.pojo.Books;
import com.hxl.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
@RequestMapping("/book")
public class BookController {
//controller調service層
@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.撰寫首頁index.jsp
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/11/8
Time: 16:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$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>
3.書籍串列allBook.jsp
<!--c標簽引入,記得引入jstl的jar包和standard的jar包-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ 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 cdn-->
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>書籍展示</h1>
</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 class="col-md-4 column">
<%--查詢書籍--%>
<form action="${pageContext.request.contextPath}/book/queryBook" method="post" style="float:right" class="form-inline">
<input type="text" name="queryBookName" class="form-control" placeholder="請輸入要查詢的書籍名稱">
<input type="submit" value="查詢" class="btn btn-primary">
</form>
</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>
<%--書籍從資料庫中查詢出來,從list中遍歷出來,--%>
<tbody>
<c:forEach var="book" items="${list}">
<tr>
<td>${book.bookID}</td>
<td>${book.bookName}</td>
<td>${book.bookCounts}</td>
<td>${book.detail}</td>
<td>
<a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.getBookID()}">更改</a> |
<a href="${pageContext.request.contextPath}/book/delete/${book.getBookID()}">洗掉</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</html>
注意這里,要引入標簽就需要加入一個standard的依賴
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
八、增加書籍
1.allBook.jsp

2.BookController
//跳轉到增加書籍頁面
@RequestMapping("/toAddBook")
public String toAddPaper(){
return "addBook";
}
3.增加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" required><br><br><br>
<input type="submit" value="添加">
</form>
</div>
</body>
</html>
4.BookController
@RequestMapping("/addBook")
public String addPaper(Books books) {
System.out.println(books);
bookService.addBook(books);
//重定向到我們的allBook請求
return "redirect:/book/allBook";
}
前端點擊按鈕需要跳轉,在控制層讓它跳轉到增加頁面,在頁面中輸入相關資訊點擊提交,提交在控制層中進行操作,結束重定向回allBook請求
這里加上required,這樣的話在頁面如果沒有輸入內容就會提示必須要輸入內容

九、修改洗掉書籍
1.在allBook中實作頁面復用

2.BookController
@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";
}
3.修改頁面updateBook
<%@ 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">
<%--不加出現問題,提交了修改的sql請求,但是修改失敗,初次考慮是事務的問題,配置完畢事務,依舊失敗--%>
<%--看一下sql陳述句,能否執行成功,sql執行失敗,修改未完成--%>
<%--前段傳遞隱藏域--%>
<%--id要傳,否則不成功,--%>
<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>
</body>
</html>
4.洗掉書籍
@RequestMapping("/del/{bookId}")
public String deleteBook(@PathVariable("bookId") int id) {
bookService.deleteBookById(id);
return "redirect:/book/allBook";
}
只要添加了jar包就要去打包,去artifact中lib
添加日志功能
在mybatis-config中增加
<settings>
<!--標準的日志工廠實作-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
十、查詢框
1.allBook增加查詢功能
<div class="col-md-4 column">
<%--查詢書籍--%>
<form action="${pageContext.request.contextPath}/book/queryBook" method="post" style="float:right">
<input type="text" name="queryBookName" class="form-control" placeholder="請輸入要查詢的書籍名稱">
<input type="submit" value="查詢" class="btn btn-primary">
</form>
</div>

我們設計是從頂到下,開發是從下到上,
2.dao->BookMapper,以及xml
//查詢書
Books queryBookByName(@Param("bookName") String bookName);
<select id="queryBookByName" resultType="Books">
select * from books where bookName = #{bookName}
</select>
3.Service->BookService以及Impl
//查詢書
Books queryBookByName(String bookName);
public Books queryBookByName(String bookName) {
return bookMapper.queryBookByName(bookName);
}
至此底層搞定
4.BookController
//查詢書籍
@RequestMapping("/queryBook")
public String Book(String queryBookName, Model model){
Books books = bookService.queryBookByName(queryBookName);
List<Books> list = new ArrayList<Books>();
list.add(books);
model.addAttribute("list", list);
return "allBook";
}
至此我們就可以運行了,
我們前端可以用標簽來接收后端傳輸過來的資訊,比如
<span>${error}</span>
model.addAttribute("error","未查到");
Java學習路線總結,搬磚工逆襲Java架構師
| 最后祝愿她考研成功🤭 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393982.html
標籤:其他
上一篇:【仿某寶做了一個時間組件邏輯】
