
一、版本匹配前置说明Spring Boot 2.xSpring5使用mybatis-spring-boot-starter 2.xSpring Boot 3.xSpring6使用mybatis-spring-boot-starter 3.x连接池主流HikariCPSpringBoot2/3 默认内置替代旧版 Druid、Tomcat JDBC二、核心依赖Maven1. SpringBoot 父工程统一版本xmlparent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version2.0.2.RELEASE/version relativePath/ /parent2. 基础 web、jdbc、mybatis、连接池xml!-- web 项目可选 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- JDBC 底层自带HikariCP连接池 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency !-- MySQL驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency !-- MyBatis SpringBoot整合启动器关键 -- dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.0.0/version /dependency !-- 可选Druid连接池替换默认Hikari -- dependency groupIdcom.alibaba/groupId artifactIddruid-spring-boot-starter/artifactId version1.1.10/version /dependency依赖关系拆解spring-boot-starter-jdbc包含spring-jdbcHikariCP 连接池mybatis-spring-boot-starter自动整合mybatismybatis-spring无需手动导入驱动包提供数据库通信能力三、核心组件原理Spring 整合 MyBatis 底层1. 三大核心对象DataSource 数据源连接池管理数据库连接复用连接、控制最大 / 最小连接数避免频繁创建销毁连接。 SpringBoot 默认 HikariDataSource。SqlSessionFactoryMyBatis 核心工厂读取 mybatis 配置、映射文件生产 SqlSession。 Spring 整合由SqlSessionFactoryBean创建。SqlSession执行 CRUD 操作Spring 中通过MapperScannerConfigurer自动生成 Mapper 代理对象无需手动 getSqlSession。2. 整合流程配置文件数据源(连接池) → DataSource → SqlSessionFactoryBean → Mapper扫描 → Mapper代理Bean注入Service四、application.yml 配置Hikari 默认连接池yaml# 数据库数据源 Hikari连接池配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: root # Hikari连接池参数 hikari: # 最小空闲连接 minimum-idle: 5 # 最大连接数 maximum-pool-size: 10 # 连接超时时间毫秒 connection-timeout: 30000 # 空闲连接超时 idle-timeout: 600000 # 连接最长生命周期 max-lifetime: 1800000 # MyBatis配置 mybatis: # mapper映射文件路径 mapper-locations: classpath:mapper/*.xml # 实体类别名包xml中可直接写类名不用全限定名 type-aliases-package: com.nzh.springbootdemo.entity configuration: # 开启SQL日志打印 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启驼峰命名自动转换 user_name → userName map-underscore-to-camel-case: true五、Druid 连接池替换 Hikariyml 配置yamlspring: datasource: url: jdbc:mysql://127.0.0.1:3306/test_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource druid: # 初始连接数 initial-size: 5 # 最小空闲 min-idle: 5 # 最大连接 max-active: 20 # 获取连接等待超时 max-wait: 60000 # 监控页面 stat-view-servlet: enabled: true login-username: admin login-password: 123456六、代码开发步骤1. 启动类添加 Mapper 扫描注解java运行import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; // 扫描Mapper接口包自动生成代理对象交给Spring管理 MapperScan(com.nzh.springbootdemo.mapper) SpringBootApplication public class SpringBootDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDemoApplication.class, args); } }MapperScan等价于旧版MapperScannerConfigurer解决你报错里的 ClassPathMapperScanner 初始化逻辑。2. 实体类 Entityjava运行package com.nzh.springbootdemo.entity; public class User { private Integer id; private String userName; private String password; // getter/setter }3. Mapper 接口java运行package com.nzh.springbootdemo.mapper; import com.nzh.springbootdemo.entity.User; import org.apache.ibatis.annotations.Param; import java.util.List; public interface UserMapper { ListUser selectAll(); User selectById(Param(id) Integer id); }4. Mapper XMLresources/mapper/UserMapper.xmlxml?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.nzh.springbootdemo.mapper.UserMapper select idselectAll resultTypeUser select id, user_name, password from user /select select idselectById resultTypeUser select id, user_name, password from user where id #{id} /select /mapper5. Service 层使用 Mapper自动注入java运行Service public class UserService { // Spring自动注入Mapper代理对象 Autowired private UserMapper userMapper; public ListUser list(){ return userMapper.selectAll(); } }七、无 SpringBoot 原生 SSM 整合纯 Spring了解底层1. Spring 配置类手动创建连接池、SqlSessionFactory、Mapper 扫描java运行Configuration MapperScan(com.nzh.mapper) public class MyBatisConfig { // 1. 创建Hikari连接池数据源 Bean public DataSource dataSource(){ HikariConfig config new HikariConfig(); config.setJdbcUrl(jdbc:mysql://localhost:3306/test_db); config.setUsername(root); config.setPassword(root); config.setMinimumIdle(5); config.setMaximumPoolSize(10); return new HikariDataSource(config); } // 2. 创建SqlSessionFactory Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean factoryBean new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); // 指定mapper文件路径 factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(classpath:mapper/*.xml)); // 实体类别名 factoryBean.setTypeAliasesPackage(com.nzh.entity); return factoryBean.getObject(); } // 3. 可选SqlSessionTemplate手动操作sqlSession Bean public SqlSession sqlSession(SqlSessionFactory factory){ return new SqlSessionTemplate(factory); } }八、连接池核心作用详解性能提升数据库创建 TCP 连接开销大连接池提前初始化一批连接复用连接大幅降低 IO 耗时。流量削峰限制最大连接数防止大量并发请求瞬间打满数据库保护 MySQL。连接自动管理自动回收空闲连接、关闭失效连接、超时检测避免连接泄漏。参数调优重点maximum-pool-size根据 MySQL 最大连接数配置MySQL 默认 151一般设 10~50minimum-idle常驻空闲连接避免高峰期临时创建连接connection-timeout获取连接等待时长超时抛异常防止线程卡死九、常见踩坑含你之前的报错AotDetector 类找不到mybatis-spring 版本过高3.x和 SpringBoot2.x 不兼容mybatis-spring-boot-starter必须用 2.x 版本。Mapper 注入失败 No qualifying bean忘记加MapperScan或扫描包路径写错。XML 映射文件找不到yml 中mapper-locations路径配置错误或 XML namespace 和 Mapper 接口全类名不一致。连接池耗尽、获取连接超时最大连接数过小代码存在事务未提交、连接泄漏调大maximum-pool-size并检查代码是否有未关闭流。驼峰命名不生效 未开启map-underscore-to-camel-case: true数据库下划线字段无法映射实体驼峰属性。十、整体执行流程总结项目启动Spring 读取 yml 数据源配置实例化Hikari 连接池 DataSourceMyBatis 自动通过 SqlSessionFactoryBean 绑定数据源加载 XML 映射文件MapperScan扫描所有 Mapper 接口基于动态代理生成实现类注册为 Spring BeanService 中 Autowired 注入 Mapper调用方法时底层从连接池取出数据库连接执行 SQLSQL 执行完毕自动归还连接至连接池不手动关闭