SSM整合
1. 流程分析
(1) 创建工程
- 创建一个 Maven 的 web 工程
- pom.xml 添加 SSM 需要的依赖 jar 包
编写 Web 项目的入口配置类,实现
AbstractAnnotationConfigDispatcherServletInitializer 重写以下方法- getRootConfigClasses() :返回 Spring 的配置类->需要==SpringConfig==配置类
- getServletConfigClasses() :返回 SpringMVC 的配置类->需要==SpringMvcConfig==配置类
- getServletMappings() : 设置 SpringMVC 请求拦截路径规则
- getServletFilters() :设置过滤器,解决 POST 请求中文乱码问题
(2)SSM 整合[==重点是各个配置的编写==]
SpringConfig
- 标识该类为配置类 @Configuration
- 扫描 Service 所在的包 @ComponentScan
- 在 Service 层要管理事务 @EnableTransactionManagement
- 读取外部的 properties 配置文件 @PropertySource
整合 Mybatis 需要引入 Mybatis 相关配置类 @Import
第三方数据源配置类 JdbcConfig
- 构建 DataSource 数据源,DruidDataSouroce,需要注入数据库连接四要素, @Bean @Value
- 构建平台事务管理器,DataSourceTransactionManager,@Bean
Mybatis 配置类 MybatisConfig
- 构建 SqlSessionFactoryBean 并设置别名扫描与数据源,@Bean
- 构建 MapperScannerConfigurer 并设置 DAO 层的包扫描
SpringMvcConfig
- 标识该类为配置类 @Configuration
- 扫描 Controller 所在的包 @ComponentScan
- 开启 SpringMVC 注解支持 @EnableWebMvc
(3)功能模块[与具体的业务模块有关]
- 创建数据库表
- 根据数据库表创建对应的模型类
- 通过 Dao 层完成数据库表的增删改查(接口+自动代理)
编写 Service 层[Service 接口+实现类]
- @Service
- @Transactional
整合 Junit 对业务层进行单元测试
- @RunWith
- @ContextConfiguration
- @Test
编写 Controller 层
- 接收请求 @RequestMapping @GetMapping @PostMapping @PutMapping @DeleteMapping
接收数据 简单、POJO、嵌套 POJO、集合、数组、JSON 数据类型
- @RequestParam
- @PathVariable
- @RequestBody
转发业务层
- @Autowired
响应结果
- @ResponseBody
2. 整合配置
步骤 1:创建 Maven 的 web 项目
步骤 2:添加依赖
pom.xml 添加 SSM 所需要的依赖 jar 包
1 |
|
步骤 3:创建项目包结构
- config 目录存放的是相关的配置类
- controller 编写的是 Controller 类
- dao 存放的是 Dao 接口,因为使用的是 Mapper 接口代理方式,所以没有实现类包
- service 存的是 Service 接口,impl 存放的是 Service 实现类
- resources:存入的是配置文件,如 Jdbc.properties
- webapp:目录可以存放静态资源
- test/java:存放的是测试类
步骤 4:创建 SpringConfig 配置类
1 |
|
步骤 5:创建 JdbcConfig 配置类
1 | public class JDBCConfig { |
步骤 6:创建 MybatisConfig 配置类
1 | public class MybatisConfig { |
步骤 7:创建 jdbc.properties
在 resources 下提供 jdbc.properties,设置数据库连接四要素
1 | jdbc.driver=com.mysql.jdbc.Driver |
步骤 8:创建 SpringMVC 配置类
1 |
|
步骤 9:创建 Web 项目入口配置类
1 | public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer { |
至此 SSM 整合的环境就已经搭建好了。在这个环境上,我们如何进行功能模块的开发呢?
3. 功能模块开发
需求:对表 tbl_book 进行新增、修改、删除、根据 ID 查询和查询所有
步骤 1:创建数据库及表
1 | create database ssm_db character set utf8; |
步骤 2:编写模型类
1 | public class Book { |
步骤 3:编写 Dao 接口
1 | public interface BookDao { |
步骤 4:编写 Service 接口和实现类
1 |
|
1 |
|
说明:
bookDao 在 Service 中注入的会提示一个红线提示,为什么呢?
- BookDao 是一个接口,没有实现类,接口是不能创建对象的,所以最终注入的应该是代理对象
- 代理对象是由 Spring 的 IOC 容器来创建管理的
- IOC 容器又是在 Web 服务器启动的时候才会创建
- IDEA 在检测依赖关系的时候,没有找到适合的类注入,所以会提示错误提示
- 但是程序运行的时候,代理对象就会被创建,框架会使用 DI 进行注入,所以程序运行无影响。
如何解决上述问题?
- 可以不用理会,因为运行是正常的
- 设置错误提示级别
步骤 5:编写 Contorller 类
1 |
|
对于图书模块的增删改查就已经完成了编写,我们可以从后往前写也可以从前往后写,最终只需要能把功能实现即可。
接下来我们就先把业务层的代码使用Spring整合Junit 的知识点进行单元测试:
4. 单元测试
步骤 1:新建测试类
1 |
|
步骤 2:注入 Service 类
1 |
|
步骤 3:编写测试方法
我们先来对查询进行单元测试。
1 |
|
根据 ID 查询,测试的结果为:
查询所有,测试的结果为:
5. PostMan 测试
5.1 新增
http://localhost/books
1 | { |
5.2 修改
http://localhost/books
1 | { |
5.3 删除
http://localhost/books/13
5.4 查询单个
http://localhost/books/1
5.5 查询所有
http://localhost/books





