这几天学完spring,springMVC,mybatis后,这两天试着去整合ssm,整合过程并不顺利,一是基础知识有的忘了,细节不能把握住,造成各种报错.看了各种视频,翻阅各种文章,多多少少总算成功了。
一.首先项目搭建工作


创建好后 在pom.xml设置打包方式为 war(记得刷新maven)
然后下面我们要做的就是搭建起我们的web项目目录和一些配置了

然后进去后按箭头找到


这样我们的项目结构就搭建完成了

二.导入项目所依赖的包
<dependencies><!-- servlet包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- spring相关包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.16</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.19</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.18</version></dependency><!-- 连接接数据库的包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.20</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!-- mybatis与spring整合相关的包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency></dependencies>
三.整合SSM
1.这里我先创建所需要的包,然后填充接口和实现类。

1.1 我们先创建实体类Book.class
(实体类与数据库相对应,这里我就不细说数据库了)
package com.localhost.pojo;public class Book {int bookId;String bookName;float bookPrice;String bookDetail;public Book() {}public Book(int bookId, String bookName, float bookPrice, String bookDetail) {this.bookId = bookId;this.bookName = bookName;this.bookPrice = bookPrice;this.bookDetail = bookDetail;}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 float getBookPrice() {return bookPrice;}public void setBookPrice(float bookPrice) {this.bookPrice = bookPrice;}public String getBookDetail() {return bookDetail;}public void setBookDetail(String bookDetail) {this.bookDetail = bookDetail;}@Overridepublic String toString() {return "Book{" +"bookId=" + bookId +", bookName='" + bookName + '\'' +", bookPrice=" + bookPrice +", bookDetail='" + bookDetail + '\'' +'}';}
}
1.2 然后创建mapper接口(这里只创建了一个方法)
BookMapper
package com.localhost.mapper;import com.localhost.pojo.Book;
import java.util.List;public interface BookMapper {// 查询所有书籍public List<Book> queryAllBook();}
1.3 创建service层的接口与实现类
BookService
package com.localhost.service;import com.localhost.pojo.Book;
import java.util.List;public interface BookService {// 查询所有书籍public List<Book> queryAllBook();
}
BookServiceImp
package com.localhost.service;import com.localhost.mapper.BookMapper;
import com.localhost.pojo.Book;import java.util.List;public class BookServiceImp implements BookService {BookMapper bookMapper;@Overridepublic List<Book> queryAllBook() {return bookMapper.queryAllBook();}
}
至此,我们的接口与类先创建到此处

2.搭建mybatis框架
2.1创建Mybatis的配置文件

2.2创建bookMapper接口对应的bookMapper.xml
注:我的bookMapper.xml的路径在resources -> com -> localhost -> mapper目录下(如图创建目录)


2.3配置mybatis-config.xml(设置连接数据库的信息和配置mappers)

2.4 进行测试

正常输出
3.我们再搭建spring框架
3.1创建spring-config.xml 并开启扫描

3.2 注解创建对象并进行测试

图中注释掉bookMapper是因为spring和mybatis还没有整合,bookMapper对象还没有正常创建
3.3编写测试类

测试正常
4.spring和mybatis进行整合
整合过程中,配置数据源的部分交给spring去做,mybatis-config.xml仅仅保留如图所示内容

1.1 spring-config.xml文件中
<?xml version="1.0" encoding="UTF8"?>
<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"><context:component-scan base-package="com.localhost"/><!-- 设置数据源头--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/bookStore"/><property name="user" value="root"/><property name="password" value="pass123"/></bean><!-- 声明事物--><bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 以下部分用来整合spring和mybatis,这样service才能注入dao对象--><!-- 声明mybatis的扫描器,创建dao对象--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><property name="basePackage" value="com.localhost.mapper"/></bean><!--声明SqlSessionFactoryBean 创建sqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
<!--
这里注释掉的 configLocation 不知道为什么没有起到作用,加载不了mybatis-config.xml,
我用了mapperLocations来代替mybatis-config.xml的<mappers> 发现可以了,
希望大家在这点能在评论区指导指导我
-->
<!-- <property name="configLocation" value="classpath:mybatis-config.xml"/>--><property name="mapperLocations" value="classpath:com/localhost/mapper/*.xml" /></bean></beans>
此时service可以注入mapper对象
1.2 测试

解开前面的注释掉的内容,导入dao层对象

正常运行,至此spring与mybatis整合完成 (或许大家留意到,这个整合方式,完全可以不用mybatis-config.xml文件)
4.搭建springMVC框架
1.1 编写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"><!--
由于服务器启动时,只会加载springMVC.xml文件,而我们的controller层需要调用service,service需要调用dao层对象
如果没有加载spring的配置文件,即spring-config.xml,则这些完成不了,
因此我们要使用监听器,当服务器启动时,让监听器去加载spring-config.xml
--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--设置配置文件路径--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-config.xml</param-value></context-param><!-- 注册前端控制器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:springMVC.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>
1.2 编写springMVC.xml
<?xml version="1.0" encoding="UTF8"?><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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!-- 仅仅扫描Controller的类 其他类对象由spring容器进行管理--><context:component-scan base-package="com.localhost"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 配置试图解析器--><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/myView/"/><property name="suffix" value=".jsp"/></bean><!--开放对静态资源的访问--><mvc:default-servlet-handler/><!--开启mvc注解驱动--><mvc:annotation-driven/></beans>
注意:controller注解类的对象交给pringMVC容器进行管理,spring容器就不需要对controller注解类的对象进行管理了,所以我们把spring-config.xml的注解扫描改成如下
<context:component-scan base-package="com.localhost"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>>
5.至此,ssm整合完毕,下面编写controller进行测试


index.html没写东西,我们直接在地址栏输入http://localhost:8080/SSM_demo/allBook
运行结果如图

这些是我分享的关于ssm整合的过程,希望能够帮助到大家,欢迎大家在评论区多多指导。
主要参考文章:(91条消息) 手把手教你 SSM 整合(非常非常非常非常非常详细)_风吹走了我脑壳后面的秀发的博客-CSDN博客_ssm整合


















