Spring 整合 MyBatis + 数据库连接池
一、版本匹配前置说明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 执行完毕自动归还连接至连接池不手动关闭

相关新闻

R 语言 PLS-DA 实战:mixOmics 与 ropls 双包对比,3步实现代谢组学数据降维

R 语言 PLS-DA 实战:mixOmics 与 ropls 双包对比,3步实现代谢组学数据降维

R语言PLS-DA实战:mixOmics与ropls双包对比与代谢组学降维指南引言:为什么需要PLS-DA?在代谢组学研究中,我们常常面临高维数据的挑战——样本量可能只有几十到几百,但检测到的代谢物数量却高达数百甚至上千种。传统的PC…

2026/7/11 2:19:28 阅读更多 →
UABEA性能优化解析:Unity资源提取效率提升1200%的底层原理与实践

UABEA性能优化解析:Unity资源提取效率提升1200%的底层原理与实践

1. 项目概述:当资源提取成为瓶颈如果你是一名Unity游戏开发者、技术美术,或者是一名热衷于游戏模组制作的爱好者,那么“资源提取”这个词对你来说一定不陌生。无论是为了分析竞品的美术风格、复用某些特效资源,还是为了制作一个改…

2026/7/11 2:17:27 阅读更多 →
大模型复合函数多层嵌套:核心取舍逻辑与实操注意点(轻量化/零资源训练专属)

大模型复合函数多层嵌套:核心取舍逻辑与实操注意点(轻量化/零资源训练专属)

大模型开发交流群:306671879 自研小参数模型和落地模型部署应用感兴趣的可以来 大模型复合函数多层嵌套:核心取舍逻辑与实操注意点(轻量化/零资源训练专属) 结合你之前吃透的「大模型多层复合函数堆叠」核心本质,以及…

2026/7/11 2:17:27 阅读更多 →

最新新闻

Unity VR物理碰撞优化:Pico设备性能与真实感平衡实战

Unity VR物理碰撞优化:Pico设备性能与真实感平衡实战

1. 项目概述:为什么VR中的物理碰撞如此棘手?如果你正在用Unity为Pico VR设备开发应用,尤其是涉及到需要抓取、投掷、交互的沉浸式体验,那么“物理碰撞”这个技术点,大概率已经让你头疼过了。这不仅仅是让两个物体不要穿…

2026/7/11 3:11:48 阅读更多 →
Codex移动端跨设备协同:AI编程助手实时监控与远程控制

Codex移动端跨设备协同:AI编程助手实时监控与远程控制

Codex是OpenAI推出的AI编程助手,现在通过ChatGPT移动应用实现了跨设备协同工作能力。这个项目最核心的价值在于让开发者能够在手机上实时查看和控制远程环境中的Codex任务执行状态,包括屏幕镜像、终端输出、测试结果等实时反馈。从技术实现角度看&#x…

2026/7/11 3:11:48 阅读更多 →
iOS激活锁绕过终极指南:使用applera1n免费解锁A9-A11设备

iOS激活锁绕过终极指南:使用applera1n免费解锁A9-A11设备

iOS激活锁绕过终极指南:使用applera1n免费解锁A9-A11设备 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾经遇到过这样的情况:购买了一台二手iPhone,却因为…

2026/7/11 3:09:48 阅读更多 →
PIC18LF47K40驱动CMT-8540S-SMT蜂鸣器的嵌入式音频设计

PIC18LF47K40驱动CMT-8540S-SMT蜂鸣器的嵌入式音频设计

1. 为什么选择PIC18LF47K40与CMT-8540S-SMT组合 在嵌入式音频项目中,微控制器与音频输出器件的选型直接影响最终效果和开发效率。PIC18LF47K40作为Microchip旗下经典的低功耗8位MCU,其内置的PWM模块和灵活的时钟系统特别适合驱动CMT-8540S-SMT这类磁性蜂…

2026/7/11 3:07:48 阅读更多 →
【大数据毕业设计】基于 Python 的微博热搜情感倾向可视化系统的设计与实现 基于 Python 的热门微博时序趋势研判系统(源码+文档+远程调试,全bao定制等)

【大数据毕业设计】基于 Python 的微博热搜情感倾向可视化系统的设计与实现 基于 Python 的热门微博时序趋势研判系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/11 3:05:47 阅读更多 →
ADS131M02与PIC18F87J10组合在精密测量中的应用

ADS131M02与PIC18F87J10组合在精密测量中的应用

1. 为什么选择ADS131M02与PIC18F87J10组合在工业测量和精密仪器领域,ADC(模数转换器)的性能往往决定整个系统的精度上限。ADS131M02是TI推出的24位Δ-Σ ADC,具有以下核心优势:双通道同步采样(最高64kSPS&a…

2026/7/11 3:05:47 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻