1、環境要求
- IDEA
- MySQL 5.7
- Tomcat 9
- Maven 3.6
需要熟練掌握MySQL資料庫,Spring,JavaWeb及Mybatis知識,基本的前端知識;
2、資料庫環境
create database ssmbuild;
use ssmbuild;
drop table id exists `books`;
CREATE TABLE `books` (
`book_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '書id',
`book_name` varchar(255) NOT NULL COMMENT '名書',
`book_counts` int(11) NOT NULL COMMENT '量數',
`detail` varchar(255) NOT NULL COMMENT '描述',
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
3、基本環境搭建
1、新建maven專案,添加web支持
2、pom依賴匯入
<!--依賴-->
<dependencies>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--mysql驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--資料庫連接池-->
<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.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.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、建立基本的結構和框架配置

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>
</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
https://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
4、Mybatis層撰寫
1、資料庫組態檔database.properties
driver=com.mysql.jdbc.Driver
# 如果使用的是MySQL 8.0+ 需要增加一個時區的配置 serverTimezone=UTC
url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf
username=root
password=123465
2、IDEA關聯資料庫

3、撰寫mybatis核心組態檔
<?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>
<settings>
<!--開啟自動駝峰命名規則,資料庫帶_欄位名自動轉換為駝峰命名,user_id -> userId -->
<setting name="mapUnderscoreToCamelCase" value=https://www.cnblogs.com/spang/p/"true"/>
4、pojo下創建物體類
Books
(可選擇)使用lombok插件生成有參、無參構造及get、set方法
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
private Integer bookId;
private String bookName;
private Integer bookCounts;
private String detail;
}
5、撰寫dao層
BookMapper介面
public interface BookMapper {
//新增一本書
int addBook(Books books);
//洗掉一本書
//@Param 作用是用于傳遞引數,從而可以與SQL中的的欄位名相對應
int deleteBook(@Param("bookId") Integer id);
//修改一本書
int updateBook(Books books);
//查詢一本書
Books queryBookById(@Param("bookId") Integer id);
//查詢所有書
List<Books> queryAllBooks();
}
BookMapper.xml實作BookMapper介面
<?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.spong.dao.BookMapper">
<insert id="addBook" parameterType="Books">
insert into ssmbuild.books(book_name, book_counts, detail)
values (#{bookName},#{bookCounts},#{detail});
</insert>
<delete id="deleteBook" parameterType="Integer">
delete from ssmbuild.books
where book_id=#{bookId};
</delete>
<update id="updateBook" parameterType="Books">
update ssmbuild.books
set book_name=#{bookName},
book_counts=#{bookCounts},
detail=#{detail}
where book_id=#{bookId};
</update>
<select id="queryBookById" parameterType="Integer" resultType="Books">
select *
from ssmbuild.books
where book_id=#{bookId};
</select>
<select id="queryAllBooks" resultType="Books">
select * from ssmbuild.books;
</select>
</mapper>
每創建一個mapper就在mybatis核心組態檔中配置
<mappers>
<mapper class="com.spong.dao.BookMapper"/>
</mappers>
6、撰寫service層
service層呼叫dao層,使用組合
BookService
public interface BookService {
//新增一本書
int addBook(Books books);
//洗掉一本書
int deleteBook(Integer id);
//修改一本書
int updateBook(Books books);
//查詢一本書
Books queryBookById(Integer id);
//查詢所有書
List<Books> queryAllBooks();
}
BookServiceImpl
public class BookServiceImpl implements BookService {
//service層呼叫dao層 組合Dao
private BookMapper bookMapper;
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
public int addBook(Books books) {
return bookMapper.addBook(books);
}
public int deleteBook(Integer id) {
return bookMapper.deleteBook(id);
}
public int updateBook(Books books) {
return bookMapper.updateBook(books);
}
public Books queryBookById(Integer id) {
return bookMapper.queryBookById(id);
}
public List<Books> queryAllBooks() {
return bookMapper.queryAllBooks();
}
}
5、Spring層撰寫
1、spring-dao.xml配置
-
Spring關聯資料庫組態檔
<!--1.關聯資料庫組態檔--> <context:property-placeholder location="classpath:database.properties"/> -
連接池(這里使用c3p0)
<!--2.連接池: dbcp: 半自動化操作,不能自動連接 c3p0: 自動化操作(自動化加載組態檔,并且可以自動設定到物件中) druid: 處理的資料量規模較大,可以進行資料的實時查詢展示,查詢模式是互動式的 hikari: 速度快、輕量的連接池,相比于其他連接池性能提示 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value=https://www.cnblogs.com/spang/p/"${driver}"/> -
注冊SQLSessionFactory
<!--3.SQLSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--注入資料源--> <property name="dataSource" ref="dataSource"/> <!--系結mybatis組態檔--> <property name="configLocation" value=https://www.cnblogs.com/spang/p/"classpath:mybatis-config.xml"/> -
掃描dao包,動態注入到Spring容器中
<!--4.配置dao掃描包,動態實作dao介面注入到Spring容器中--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--注入sqlSessionFactory--> <property name="sqlSessionFactoryBeanName" value=https://www.cnblogs.com/spang/p/"sqlSessionFactory"/>
2、Spring-service.xml配置(事務)
-
掃描service下的包,實作動態注入
<!--1.掃描service下的包,注入Spring容器--> <context:component-scan base-package="com.spong.service"/> -
也可以選擇直接配置service實作類(1,2選一)
<!--2.將所有的業務類注入到Spring,可以通過配置或者注解--> <bean id="BookServiceImpl" class="com.spong.service.BookServiceImpl"> <property name="bookMapper" ref="bookMapper"/> </bean> -
宣告事務配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--注入資料源--> <property name="dataSource" ref="dataSource"/> </bean> -
AOP事務(根據需要添加)
https://www.cnblogs.com/spang/p/13488174.html 供參考
6、SpringMVC層撰寫
1、web.xml配置
-
DispatcherServlet 配置
<!--DispatcherServlet--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--系結spring組態檔,獲得初始化引數--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> -
Filter過濾器
<!--亂碼過濾--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>注意這里的url-pattern需要 /* 即jsp頁面也需要過濾
關于web.xml的url映射的小知識: < url-pattern>/</url-pattern> 會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的后綴型url < url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和后綴型的url(包括/login,*.jsp,*.js和*.html等) -
Session相關配置
<!--Session--> <session-config> <!--Session保存時間 15分鐘--> <session-timeout>15</session-timeout> </session-config>
2、Spring-mvc.xml配置
<!--1.開啟注解驅動-->
<mvc:annotation-driven/>
<!--2.開啟靜態資源過濾-->
<mvc:default-servlet-handler/>
<!--3.掃描包:controller-->
<context:component-scan base-package="com.spong.controller"/>
<!--4.視圖決議器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value=https://www.cnblogs.com/spang/p/"/WEB-INF/jsp/"/>
最后將所有組態檔在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
https://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>
到此框架整合完畢,開始視圖層和controller層的撰寫
7、Controller層及視圖頁面
1.BookController類撰寫 方法一:查詢全部書籍
@Controller
@RequestMapping("/books")
public class BookController {
//Controller層調Service層
//Spring容器自動注入其中的bookService
@Autowired
private BookService bookService;
//查詢全部書籍,并回傳一個顯示所有書籍的頁面
@RequestMapping("/allBooks")
public String queryAllBooks(Model model){
List<Books> booksList = bookService.queryAllBooks();
model.addAttribute("booksList",booksList);
return "allBooks";
}
}
2、書籍串列頁面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>新增書籍</title>
<link rel="stylesheet" href=https://www.cnblogs.com/spang/p/"https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" >
<body>
書籍串列————新增書籍
