SSM整合
在这之前我们已经学习了如何整合Spring和web项目,若要整合Spring,SpringMVC,Mybatis时,只需要在其基础上加入SpringMVC和MyBatis就可以了;
整合步骤:
1.准备空的web项目
2.在web.xml中配置Spring容器
3.在web.xml中配置SpringMVC核心控制器
4.整合MyBatis与Spring
pom依赖:
主要依赖类别:,webmvc(会自动依赖Spring其他核心jar) , web基础的(jstl,jsp,servlet),mybatis ,事务管理, AspectJ
org.springframework
spring-webmvc
5.2.2.RELEASE
org.mybatis
mybatis-spring
2.0.3
org.mybatis
mybatis
3.5.2
mysql
mysql-connector-java
5.1.44
org.springframework
spring-jdbc
5.2.2.RELEASE
org.springframework
spring-tx
5.2.2.RELEASE
org.aspectj
aspectjweaver
1.8.0
javax.servlet
jstl
1.2
javax.servlet.jsp
javax.servlet.jsp-api
2.3.3
provided
javax.servlet
javax.servlet-api
4.0.1
provided
springmvc.xml
applicationContext.xml
web.xml
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
*.action
MyController.java
@Controller
public class MyController {
@Autowired
private CourseService courseService;
@RequestMapping("/courseList.action")
public ModelAndView courseList(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("courses.jsp");
modelAndView.addObject("courses",courseService.selectCourseList());
return modelAndView;
}
}
//别忘记CourseService注册到容器,注入Mapper 进行查询 篇幅太大不放了
courses.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
名称
讲师
开课日期
学分
课时
操作
${course.name}
${course.teachName}
${course.score}
${course.hours}
修改
配置完成后启动服务器,访问:http://localhost:8080/SSMTest/courseList.action
案例中设计到的mapper,pojo以及SQL使用MyBatis逆向生成的;
到此SSM的整合就完成了; (事务配置和其他配置均与Spring项目没有区别)
事务AOP等配置与单独的Spring没有区别,但不过要注意现在有两个Spring配置文件,别写错位置;
Spring与SpringMVC容器关系:
SpringMVC容器固然是一个拥有Spring所有功能的容器,但是为了分离关注点,通常SpringMVC容器只处理与请求响应相关的内容,即Controller层;
Spring框架采用了父子容器的方式来实现分离关注点;实际上SpringMVC被作为了Spring的子容器;如下所示:
外层的Spring容器为父容器,里面的SpringMVC为子容器,要强调的是其他的框架并不是容器,只是容器中的一堆Bean;
职责分配:
- Spring容器主要负责集成其他框架,配置AOP,事务
- SpringMVC容器负责处理请求响应即Controller层
特点:
- 子容器可直接访问父容器中的Bean,而父容器不能访问子容器的Bean
- 子容器优先从自身里查找Bean,找不到时才会找父容器
容易出的问题:
事务处理通常在父容器中配置,因为MyBatis相关Bean是由父容器管理的,假设已经在父容器为Service层配置了事务,子容器没有配置事务,但是子容器却扫描了Service层,这时候事务就不生效了,因为子容器中有ServiceBean,但是却没有事务;