首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SSM框架从入门到入土(SSM框架整合)

SSM框架从入门到入土(SSM框架整合)

作者头像
北极的代码
发布2026-04-22 18:37:01
发布2026-04-22 18:37:01
880
举报

前言:尽管我们以后要学Springboot,但是SpringMvc依旧是需要掌握的知识,他是Springboot的基础,学习他可以帮助我们更好的理解SPringboot的底层,而不是一味的“白雪”。况且面试题还会问到这两者的关系呢。不说废话了,这章我们要将前面学的三个框架放到一起工作(Spring SpringMVC,Mybatis)。

这里提一下,我在创建这个模块时,报了一个错,我的maven版本太过老旧好像是2019年的与 maven-archetype-plugin:3.4.1插件版本不兼容,这里提供更新的maven解压包,这样就解决了版本不兼容的问题https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip

下载解压后,不要忘记把原来旧版本maven的环境变量修改,最后在命令行中输入mvn -v(注意有个空格)检验版本是否是新版的3.6.3

如图所示:

创建配置类:

代码语言:javascript
复制
src/main/java
├── com.example.config
│   ├── ServletContainersInitConfig  (或者 MyWebAppInitializer)
│   ├── SpringConfig                (根容器配置)
│   ├── SpringMvcConfig            (Web层配置)
│   ├── MyBatisConfig              (MyBatis整合配置)
│   └── JdbcConfig                 (数据库连接池配置)
1.ServletContainersInitConfig(或 MyWebAppInitializer)

作用:替代 web.xml,启动容器,加载 Spring 和 SpringMVC 配置 继承AbstractAnnotationConfigDispatcherServletInitializer

2. SpringConfig(根容器配置)

作用:Spring 核心配置,扫描除 Controller 以外的 Bean 注解@Configuration@ComponentScan@Import

java

代码语言:javascript
复制
@Configuration
@ComponentScan(basePackages = "com.example",
               excludeFilters = @ComponentScan.Filter(
                   type = FilterType.ANNOTATION,
                   classes = Controller.class
               ))
@Import({JdbcConfig.class, MyBatisConfig.class})
public class SpringConfig {
    // 可以配置一些全局的 Spring Bean
}
3. SpringMvcConfig(Web层配置)

作用:SpringMVC 配置,扫描 Controller、视图解析器、静态资源等 注解@Configuration@ComponentScan@EnableWebMvc

代码语言:javascript
复制
@Configuration
@ComponentScan(basePackages = "com.example.controller")
@EnableWebMvc  // 启用 SpringMVC 注解驱动
public class SpringMvcConfig implements WebMvcConfigurer {
    
    // 静态资源放行
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    
    // 视图解析器(如果使用 JSP)
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/pages/");
        resolver.setSuffix(".jsp");
        resolver.setOrder(0);
        return resolver;
    }
    
    // JSON 转换器(如果使用 Jackson)
    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        return new MappingJackson2HttpMessageConverter();
    }
}
4. JdbcConfig(数据库连接池)

作用:配置数据源(Druid、HikariCP 等) 注解@Configuration@Bean@PropertySource

代码语言:javascript
复制
@Configuration
@PropertySource("classpath:jdbc.properties")  // 加载配置文件
public class JdbcConfig {
    
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

jdbc.properties 文件:

代码语言:javascript
复制
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
5.MyBatisConfig(MyBatis整合)

作用:配置 SqlSessionFactory、Mapper 扫描等 注解@Configuration@Bean@MapperScan

代码语言:javascript
复制
@Configuration
public class MyBatisConfig {
    
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.example.domain");  // 实体类包
        
        // 配置 MyBatis 全局设置(可选)
        org.apache.ibatis.session.Configuration configuration = 
            new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);  // 驼峰命名
        factoryBean.setConfiguration(configuration);
        
        return factoryBean;
    }
    
    // Mapper 扫描也可以在这里配置,或者在 SpringConfig 配置

或者直接在 SpringConfig 上添加 @MapperScan

代码语言:javascript
复制
@Configuration
@ComponentScan(...)
@MapperScan(basePackages = "com.example.mapper")  // 扫描 Mapper 接口
@Import({JdbcConfig.class, MyBatisConfig.class})
public class SpringConfig {

配置类

必选

作用

ServletContainersInitConfig

启动容器,整合 Spring/SpringMVC

SpringConfig

Spring 根容器(Service、Dao)

SpringMvcConfig

SpringMVC 容器(Controller)

JdbcConfig

数据源配置

MyBatisConfig

MyBatis 整合配置

功能模块开发:

代码语言:javascript
复制
src/main/java
├── com.example
│   ├── controller          # Controller层
│   │   └── UserController.java
│   ├── service            # Service层
│   │   ├── UserService.java
│   │   └── impl
│   │       └── UserServiceImpl.java
│   ├── dao                # Dao层(Mapper)
│   │   └── UserDao.java
│   ├── domain             # 实体类
│   │   └── User.java
│   └── config             # 配置类
│       ├── SpringConfig.java
│       └── ...      

层级

类/文件

核心注解

主要职责

Domain

User.java

数据实体

Dao

UserDao.java

@Mapper

数据库操作接口

Mapper

UserMapper.xml

SQL映射(可选)

Service

UserService.java

业务接口

ServiceImpl

UserServiceImpl.java

@Service

业务实现

Controller

UserController.java

@Controller

请求处

测试顺序:

  1. 测试DAO层(单独测试MyBatis)
  2. 测试Service层(Spring容器)
  3. 测试Controller层(Postman)
  4. 前后端联调

异常处理:

代码语言:javascript
复制
客户端请求
    ↓
Controller层 (接收请求)
    ↓
Service层 (业务处理)  ← 抛出异常
    ↓                      ↓
    ↓                  异常向上传播
    ↓                      ↓
Controller层 (没有try-catch) 
    ↓                      ↓
    ↓                  异常继续传播
    ↓                      ↓
全局异常处理器  ← ← ← ← ← 捕获异常
    ↓
统一处理后返回给客户端

出现异常现象的常见位置与常见诱因如下:

框架内部抛出的异常:因使用不合规导致 数据层抛出的异常:因外部服务器故障导致(例如:服务器访问超时) 业务层抛出的异常:因业务逻辑书写错误导致(例如:遍历业务书写操作,导致索引异常等)

表现层抛出的异常:因数据收集、校验等规则导致(例如:不匹配的数据类型间导致异常)

工具类抛出的异常:因工具类书写不严谨不够健壮导致(例如:必要释放的连接长期未释放等)

项目异常处理方案

业务异常(BusinessException) 发送对应消息传递给用户,提醒规范操作

系统异常(SystemException) 发送固定消息传递给用户,安抚用户。 发送特定消息给运维人员,提醒维护 记录日志

其他异常(Exception) 发送固定消息传递给用户,安抚用户 发送特定消息给编程人员,提醒维护(纳入预期范围内) 记录日志

1.自定义项目系统级异常
2.自定义项目业务级异常
3.自定义异常编码
4.触发自定义异常(抛出)
5.拦截并处理异常

并在其中规范返回结果通知前端工作人员

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建配置类:
    • 1.ServletContainersInitConfig(或 MyWebAppInitializer)
    • 2. SpringConfig(根容器配置)
    • 3. SpringMvcConfig(Web层配置)
    • 4. JdbcConfig(数据库连接池)
    • 5.MyBatisConfig(MyBatis整合)
  • 功能模块开发:
  • 测试顺序:
  • 异常处理:
    • 项目异常处理方案
      • 1.自定义项目系统级异常
      • 2.自定义项目业务级异常
      • 3.自定义异常编码
      • 4.触发自定义异常(抛出)
      • 5.拦截并处理异常
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档