# ssm
**Repository Path**: YYR_KM/ssm
## Basic Information
- **Project Name**: ssm
- **Description**: Spring、springMVC、Mybatis整合
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-02-21
- **Last Updated**: 2023-03-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SSM整合
[https://blog.csdn.net/jsdoulaoula/article/details/124670653?spm=1001.2014.3001.5501](https://blog.csdn.net/jsdoulaoula/article/details/124670653?spm=1001.2014.3001.5501)
## ssm整合
### 步骤分析
我们先来分析下如何把Spring、SpringMVC、MyBatis整合到一起。
#### 步骤
1.Spring整合上MyBatis
通过Service层Dao层都注入Spring容器中
2.引入配置SpringMVC
把Controller层注入SpringMVC容器中
3.让web项目启动时自动读取Spring配置文件来创建Spring容器
可以使用ContextLoaderListener来实现Spring容器的创建。

#### 常见疑惑
为什么要用两个容器?
因为Controller如果不放在MVC容器中会没有效果,无法处理请求。而Service如果不放在Spring容器中,声明式事务也无法使用。
SpringMVC容器中的Controller需要依赖Service,能从Spring容器中获取到所依赖的Service对象嘛?
Spring容器相当于是父容器,MVC容器相当于是子容器。子容器除了可以使用自己容器中的对象外还可以使用父容器中的对象。
### 准备工作
引入所有依赖
```
org.springframework
spring-context
5.1.9.RELEASE
org.aspectj
aspectjweaver
1.8.13
org.springframework
spring-jdbc
5.1.9.RELEASE
org.mybatis
mybatis-spring
2.0.4
org.mybatis
mybatis
3.5.4
log4j
log4j
1.2.17
com.github.pagehelper
pagehelper
4.0.0
mysql
mysql-connector-java
5.1.47
com.alibaba
druid
1.1.16
junit
junit
4.12
org.springframework
spring-test
5.1.9.RELEASE
org.projectlombok
lombok
1.18.12
provided
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
jsp-api
2.1
provided
org.springframework
spring-webmvc
5.1.9.RELEASE
com.fasterxml.jackson.core
jackson-databind
2.9.0
commons-fileupload
commons-fileupload
1.4
```
数据库初始化语句
```
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`age`,`address`) values (1,'UZI',19,'上海'),(2,'PDD',25,'上海');
```
### 相关配置
#### 整合Spring和Mybatis
在resources目录下创建Spring核心配置文件: **applicationContext.xml** 内容如下
```
```
在resources目录下创建**jdbc.properties** 文件,内容如下:
```
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password="000000"
```
在resources目录下创建**mybatis-config.xml** ,内容如下:
```
```
在resources目录下创建**log4j.properties** ,内容如下:
```
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
```
#### SpringMVC引入
在resources目录下创建**spring-mvc.xml** ,内容如下:
```
```
修改web.xml文件
```
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
DispatcherServlet
/
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
```
#### Spring整合入web项目
让web项目启动的时候就能够创建Spring容器。可以使用Spring提供的监听器ContextLoaderListener,所以我们需要再web.xml中配置这个监听器,并且配置上Spring配置文件的路径。
```
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
```
### 编写Controller、Service、Dao
我们来编写根据id查询用户的接口来测试
编写Controller
```
package com.yyr.test.controller;
import com.yyr.test.domain.User;
import com.yyr.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
//@Controller
//@ResponseBody
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User findById(@PathVariable("id") Integer id){
User user=userService.findById(id);
return user;
}
}
```
编写service
```
package com.yyr.test.service;
import com.yyr.test.domain.User;
public interface UserService {
User findById(Integer id);
}
```
编写service实现类
```
package com.yyr.test.service.impl;
import com.yyr.test.domain.User;
import com.yyr.test.dao.UserDao;
import com.yyr.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public User findById(Integer id) {
return userDao.findById(id);
}
}
```
编写dao
```
package com.yyr.test.dao;
import com.yyr.test.domain.User;
public interface UserDao {
User findById(Integer id);
}
```
编写对应的mapperxml映射文件
```
```
tomcat启动
