SSM期末复习之SSM整合
1.SSM中常用的类库及主要用途。
|
类库 |
所属框架 |
主要用途 |
|
SqlSessionFactory |
MyBatis |
创建 SqlSession(MyBatis核心操作对象),管理数据库连接和SQL映射配置。 |
|
SqlSession |
MyBatis |
执行SQL命令(增删改查)、获取Mapper接口代理对象。 |
|
MapperScannerConfigurer |
Spring |
自动扫描并注册MyBatis Mapper接口为Spring Bean,无需手动声明每个Mapper。 |
|
PageHelper |
第三方分页插件 |
实现MyBatis物理分页,简化分页逻辑(PageHelper.startPage(pageNum, pageSize))。 |
|
DispatcherServlet |
Spring MVC |
前端控制器,接收所有HTTP请求并分发到对应Controller。 |
|
@Controller |
Spring MVC |
标记类为控制器,处理HTTP请求并返回视图或数据。 |
|
@RequestMapping |
Spring MVC |
映射HTTP请求路径到Controller方法。 |
|
HandlerAdapter |
Spring MVC |
适配不同Controller类型(如基于注解的@Controller)。 |
|
ViewResolver |
Spring MVC |
解析逻辑视图名(如"userList")为实际视图(如JSP、Thymeleaf模板)。 |
|
ApplicationContext |
Spring |
IoC容器,管理所有Bean(Service、DAO、Controller等)的生命周期和依赖注入。 |
|
DataSource |
Spring JDBC |
配置数据库连接池(如Druid、HikariCP),管理数据库连接。 |
|
JdbcTemplate |
Spring JDBC |
简化JDBC操作(非必须,MyBatis通常替代此角色)。 |
|
AspectJ |
Spring AOP |
实现面向切面编程(如日志、事务管理)。 |
2.Mybatis、Spring、SpringMVC整合中各自的分工及优点。
|
框架 |
核心职责 |
|
Spring |
IoC容器:统一管理所有Bean(Service、DAO、Controller等)。 |
|
Spring MVC |
Web层:处理HTTP请求/响应。 |
|
MyBatis |
持久层:操作数据库。 |
整合优点
|
框架 |
优点 |
|
Spring |
✅ 解耦组件依赖(依赖注入) |
|
Spring MVC |
✅ 清晰的MVC分层 |
|
MyBatis |
✅ SQL灵活可控(避免Hibernate的黑盒问题) |
3.Mybatis、Spring、SpringMVC整合的典型配置文件。
XML配置方式(传统)
<!-- 1. web.xml (配置Spring MVC前端控制器) -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 2. spring-mvc.xml (Spring MVC配置) -->
<beans>
<!-- 扫描Controller -->
<context:component-scan base-package="com.example.controller" />
<!-- 注解驱动 + JSON支持 -->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
<!-- 3. applicationContext.xml (Spring核心配置) -->
<beans>
<!-- 扫描Service/DAO -->
<context:component-scan base-package="com.example.service, com.example.dao" />
<!-- 数据源 (以Druid为例) -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
<!-- MyBatis SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!-- 扫描Mapper接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.dao" />
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
Java Config方式(推荐,Spring Boot风格)
// 1. Spring核心配置
@Configuration
@ComponentScan(basePackages = "com.example")
@EnableTransactionManagement
public class AppConfig {
@Bean
public DataSource dataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setUrl("jdbc:mysql://localhost:3306/test");
ds.setUsername("root");
ds.setPassword("123456");
return ds;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource());
factory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/*.xml"));
return factory.getObject();
}
@Bean
public MapperScannerConfigurer mapperScanner() {
MapperScannerConfigurer scanner = new MapperScannerConfigurer();
scanner.setBasePackage("com.example.dao");
return scanner;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
// 2. Spring MVC配置
@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable(); // 支持静态资源
}
}
// 3. 初始化类 (替代web.xml)
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{AppConfig.class}; // Spring配置
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebMvcConfig.class}; // Spring MVC配置
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
关键整合点总结
| 配置项 | 作用 |
|---|---|
MapperScannerConfigurer |
自动注册MyBatis Mapper接口 |
SqlSessionFactoryBean |
创建MyBatis核心工厂,绑定数据源和Mapper XML |
DataSourceTransactionManager |
Spring管理MyBatis事务 |
DispatcherServlet |
Spring MVC请求入口 |
@EnableTransactionManagement |
开启注解事务支持 |
提示:
事务管理务必由Spring负责(使用
@Transactional注解Service层方法)。Mapper XML文件需与接口同名同路径(如
UserDao.java对应UserDao.xml)。避免在Controller中直接操作数据库,保持分层清晰。
通过以上整合,SSM框架实现了高内聚低耦合的分层架构,充分发挥各框架优势,是Java Web开发的经典组合。
更多推荐


所有评论(0)