1.SSM中常用的类库及主要用途。

类库

所属框架

主要用途

SqlSessionFactory

MyBatis

创建 SqlSessionMyBatis核心操作对象),管理数据库连接和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")为实际视图(如JSPThymeleaf模板)。

ApplicationContext

Spring

IoC容器,管理所有BeanServiceDAOController等)的生命周期和依赖注入。

DataSource

Spring JDBC

配置数据库连接池(如DruidHikariCP),管理数据库连接。

JdbcTemplate

Spring JDBC

简化JDBC操作(非必须,MyBatis通常替代此角色)。

AspectJ

Spring AOP

实现面向切面编程(如日志、事务管理)。

2.Mybatis、Spring、SpringMVC整合中各自的分工及优点。

框架

核心职责

Spring

IoC容器:统一管理所有Bean(Service、DAO、Controller等)。
AOP:提供声明式事务管理(@Transactional)。

Spring MVC

Web:处理HTTP请求/响应。
路由与控制:通过@Controller@RequestMapping分发请求。
视图解析:渲染结果(JSON/HTML)。

MyBatis

持久层:操作数据库。
SQL映射:将Java方法映射到SQL语句(XML/注解)。
结果集处理:自动映射结果到Java对象。

整合优点

框架

优点

Spring

✅ 解耦组件依赖(依赖注入)
✅ 统一事务管理
✅ 整合其他框架(MyBatis、Redis等)

Spring MVC

✅ 清晰的MVC分层
✅ 灵活的请求映射与参数绑定
✅ 支持RESTful风格
✅ 强大的数据验证与格式化

MyBatis

✅ SQL灵活可控(避免Hibernate的黑盒问题)
✅ 动态SQL(<if><foreach>
✅ 结果集自动映射
✅ 低学习曲线

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开发的经典组合。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐