MyBatis - Spring Boot 集成 MyBatis
文章目录
- 1.版本要求
- 2.导入依赖
- 3.自动配置
- 2.可配置项
MyBatis-Spring-Boot-Starter 可以帮助你更快地在 Spring Boot 之上构建 MyBatis 应用。通过使用该模块我们能够快速实现以下目的:
- 构建单体应用程序
- 将几乎不需要样板配置
- 使用更少的 XML 配置
1.版本要求
MyBatis-Spring-Boot-Starter 要求以下版本:
| MyBatis-Spring-Boot-Starter | MyBatis-Spring | Spring Boot | Java |
|---|---|---|---|
| 3.0 | 3.0 | 3.0 - 3.1 | 17 或更高 |
| 2.3 | 2.1 | 2.5 - 2.7 | 8 或更高 |
从上面的版本要求,我们们也不难发现,在 Spring Boot 3.x 发布后,MyBatis Starter 也进行了兼容性适配,在 Spring Boot 3.x 项目中我们可以使用 mybatis-spring-boot-starter 3.x 的版本。
2.导入依赖
Spring Boot 官方没有提供 MyBatis Starter,但是 MyBatis 官方提供了 mybatis-spring-boot-starter 一站式启动器。如果你使用 Maven,要使用 MyBatis-Spring-Boot-Starter 模块,你只需要在你的 pom.xml 添加以下依赖:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis-starter.version}</version>
</dependency>
具体使用哪个版本的 MyBatis 依赖需要根据实际情况进行选择,然后对应替换上例中的 ${mybatis-starter.version} 部分。对应的你可以到 Maven 中央仓库进行查阅:Maven Repository:mybatis-spring-boot-starter。
3.自动配置
当我们导入 mybatis-spring-boot-starter,它就同时导入了使用 MyBatis 所需的所有依赖:

在 org.mybatis.spring.boot.autoconfigure 的自动配置文件中也包含了 Spring Boot 使用 MyBatis 时所需的自动配置,对应的自动配置类为 MyBatisAutoConfiguration,它代替了传统 Spring 项目集成 MyBatis 所需的 XML 配置文件。

自动配置类 MyBatisAutoConfiguration 主要负责 SqlSessionFactory 和 SqlSessionTemplate 两个实例的创建和注册。
SqlSessionFactory: 这是 MyBatis 的核心类,用于创建SqlSession对象。它存储了执行 SQL 命令所需的所有配置信息。Spring Boot 通过SqlSessionFactoryBean创建SqlSessionFactory,并自动将数据源、事务管理器、配置属性等所需的依赖注入其中。SqlSessionTemplate: 这是SqlSession的线程安全的实现,代表了与数据库的一次会话。在 Spring 管理的事务中,SqlSessionTemplate可以确保使用的是同一个SqlSession。SqlSessionTemplate实例由 Spring Boot 在创建SqlSessionFactory后自动创建并注册,将SqlSessionFactory作为参数传递给其构造函数。
对应的源码如下:
// MyBatis自动配置类
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnSingleCandidate(DataSource.class) // 单一数据源
@EnableConfigurationProperties({MybatisProperties.class}) // 参数绑定配置类
@AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class})
public class MybatisAutoConfiguration implements InitializingBean {// 配置SqlSessionFactory@Bean@ConditionalOnMissingBeanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {// ......}// 配置SqlSessionTemplate@Bean@ConditionalOnMissingBeanpublic SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {ExecutorType executorType = this.properties.getExecutorType();return executorType != null ? new SqlSessionTemplate(sqlSessionFactory, executorType) : new SqlSessionTemplate(sqlSessionFactory);}// ......
}
注意:从上述源码中不难看出,
SqlSessionFactory需要一个DataSource(数据源)。这可以是任意的DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。
对应的参数绑定配置类为 MyBatisProperties,通过一系列 mybatis.* 参数就可以自定义 MyBatis 配置。
2.可配置项
MybatisProperties 参数绑定配置类源码如下:
@ConfigurationProperties(prefix = "mybatis") // 指定前缀为 mybatis
public class MybatisProperties {public static final String MYBATIS_PREFIX = "mybatis";private static final ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();private String configLocation;private String[] mapperLocations;private String typeAliasesPackage;private Class<?> typeAliasesSuperType;private String typeHandlersPackage;private boolean checkConfigLocation = false;private ExecutorType executorType;private Class<? extends LanguageDriver> defaultScriptingLanguageDriver;private Properties configurationProperties;@NestedConfigurationProperty// 核心配置private Configuration configuration;// ......
}
下表是基于上述源码整理的常用 mybatis.* 配置参数:
| 配置项 | 说明 |
|---|---|
| mybatis.config-location | MyBatis 的配置文件位置(默认扫描 CLASSPATH 路径) |
| mybatis.mapper-locations | MyBatis 映射文件的位置,支持通配符 |
| mybatis.type-aliases-package | MyBatis 实体类别名的包路径 |
| mybatis.type-handlers-package | 类型映射所需的 TypeHandler 放置的包路径 |
从源码中还可以看到,其中提供了一个 CoreConfiguration 类型的配置属性,这是一个内部类,其中定义了对应于 MyBatis 的核心配置文件的内容,源码如下:
public static class CoreConfiguration {private Boolean safeRowBoundsEnabled;private Boolean safeResultHandlerEnabled;private Boolean mapUnderscoreToCamelCase;private Boolean aggressiveLazyLoading;private Boolean multipleResultSetsEnabled;private Boolean useGeneratedKeys;private Boolean useColumnLabel;private Boolean cacheEnabled;private Boolean callSettersOnNulls;private Boolean useActualParamName;private Boolean returnInstanceForEmptyRow;private Boolean shrinkWhitespacesInSql;private Boolean nullableOnForEach;private Boolean argNameBasedConstructorAutoMapping;private Boolean lazyLoadingEnabled;private Integer defaultStatementTimeout;private Integer defaultFetchSize;private LocalCacheScope localCacheScope;private JdbcType jdbcTypeForNull;private ResultSetType defaultResultSetType;private ExecutorType defaultExecutorType;private AutoMappingBehavior autoMappingBehavior;private AutoMappingUnknownColumnBehavior autoMappingUnknownColumnBehavior;private String logPrefix;private Set<String> lazyLoadTriggerMethods;private Class<? extends Log> logImpl;private Class<? extends VFS> vfsImpl;private Class<?> defaultSqlProviderType;Class<? extends TypeHandler> defaultEnumTypeHandler;private Class<?> configurationFactory;private Properties variables;// ......
}
其实这就对应了 MyBatis 官方文档中的 XML 配置部分,需要时直接进行查阅即可:mybatis – MyBatis 3 | 配置

下表是基于上述源码整理的常用 mybatis.configuration.* 配置参数:
| 配置项 | 说明 |
|---|---|
| mybatis.configuration.default-statement-timeout | 设置默认语句超时时间,它决定数据库驱动等待数据库响应的秒数。 |
| mybatis.configuration.map-underscore-to-camel-case | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 |
注意:以上两个配置项不能和
mybatis.config-location一起使用。
例如,在我们项目的 application 配置文件里就可以像下面这样做配置:
mybatis:type-handlers-package: cn.javgo.demo.support.handlertype-aliases-package: cn.javgo.demo.modelconfiguration:map-underscore-to-camel-case: true
相关文章:
MyBatis - Spring Boot 集成 MyBatis
文章目录 1.版本要求2.导入依赖3.自动配置2.可配置项 MyBatis-Spring-Boot-Starter 可以帮助你更快地在 Spring Boot 之上构建 MyBatis 应用。通过使用该模块我们能够快速实现以下目的: 构建单体应用程序将几乎不需要样板配置使用更少的 XML 配置 1.版本要求 MyB…...
常见开源协议介绍
开源协议是指开放源代码软件的使用、修改和分发的规则。开源协议的出现,使得开发者可以在保护自己的知识产权的同时,也可以让其他人使用、修改和分发自己的代码。本文将介绍几种常见的开源协议。 一、GPL协议 GPL(GNU General Public Licens…...
第十九章行为型模式—中介者模式
文章目录 中介者模式解决的问题结构实例存在的问题适用场景 中介者模式和代理模式的区别代理模式中介模式桥接模式总结 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,它涉及算法…...
AKStream部署1:ZLMediaKit流媒体服务器(win)
环境准备: windows10/11 visual stadio 2022(.net 6) cmake 3.22.0 git bash 没讲究直接下最新的 ffmpeg : ffmpeg-5.1.2-full_build VLC播放器:VLC media player ZLMediaKit:gitee地址 1、安装上述软件 例ffmpeg下载解压至某自定…...
【Redis】Redis 中地理位置功能 Geospatial 了解一下?
文章目录 前言一、Geospatial Indexes 的数据结构二、常用命令三、实用场景示例1. 找出某一经纬度周围的餐馆2. 按照距离排序查询景点 四、在实际开发中,需要注意以下几点: 前言 Geospatial Indexes 是 Redis 提供的一种数据结构,用于存储和…...
Qt Qml 实现键鼠长时间未操作锁屏
文章目录 摘要实现思路键盘鼠标监控百度到的方法我的自己方法 最后 关键字: Qt、 Qml、 QInputEvent 、 QStandardItem、 eventFilter 摘要 今日需求: 项目中需要实时检测用户是否长时间为操作键盘和鼠标,如果超过预设时间未操作键盘和…...
常用的数字高程模型(DEM)数据介绍,附免费下载
常用的数字高程模型(DEM)数据: ETOPO(1.8千米) ETOPO是一种地形高程数据,由NGDC美国地球物理中心发布,与大多数高程数据不同的是,它还包含海底地形数据。 SRTM15(450…...
字节跳动面试挂在2面,复盘后,决定二战.....
先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,字节的游戏专场又是最早开始的,就投递了…...
简述熔断、限流、降级
高并发场景指的是在大量用户同时访问服务时,服务能够保持稳定和高效运行的能力。 常用的解决高并发场景下服务不可用问题的技术手段包括熔断、限流和降级: - 熔断:当服务的错误率超过一定阈值时,熔断器会自动断开服务的调用&…...
Maven 工具
Maven 工具 Maven简介Maven 基础概念创建 Maven项目依赖配置生命周期与插件分模块开发聚合和继承聚合继承聚合与继承的区别 属性版本管理多环境配置与应用私服 Maven简介 Maven 本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM…...
iptables扩展匹配条件
文章目录 1. multiport模块2. iprange模块3. string模块4. time模块5. icmp模块6. connlimit模块7. limit模块8.tcp扩展模块9.state模块10 Iptables自定义链1.1 为什么要使用自定义链1.2 创建自定义链1.3 引用自定义链1.4 重命名自定义链1.5 删除自定义链 1. multiport模块 常…...
直播录音时准备一副监听耳机,实现所听即所得,丁一号G800S上手
有些朋友在录视频还有开在线会议的时候,都会遇到一个奇怪的问题,就是自己用麦克风收音的时候,自己的耳机和别人的耳机听到的效果不一样,像是音色、清晰度不好,或者是缺少伴奏以及背景音嘈杂等,这时候我们就…...
回归测试最小化(贪心算法,帕累托支配)
回归测试最小化(贪心算法,帕累托支配) 介绍 有时我们不能只是重新运行我们的测试(例如,当我们 换界面)。 回归测试可能很昂贵: (1)一些公司通宵运行回归测试套件。 (2) 对于嵌入式系统,我们可能必须测试正在使用的软件࿰…...
Python系列模块之标准库shutil详解
感谢点赞和关注 ,每天进步一点点!加油! 目录 一、shutil介绍 二 、使用详解 2.1 复制函数 2.1.1 shutil.copy 2.1.2 shutil.copy2 2.1.3 shutil.copyfile 2.1.4 shutil.copytree 2.2 移动文件 2.2.1 shutil.move 2.3 删除文件 2.3…...
pb如何播放Flash
---- Flash动画不仅包含动画,还可有声音、超文本连接,同时由于它是矢量格式文件,生成的这种包含动画、声音等的文件(*.swf)很小,非常适 合在网络上传输使用,因而在当前Web网页技术中得到很快发展。本文讨论在PowerBuilder6.5数据库编程中用Flash4提供的控件"Swflas…...
独立成分分析ICA
独立成分分析 ICA 1. 算法原理简介2.源信号与混合信号的差异2.1 独立性 Independence2.2 高斯性 Normality2.3 复杂性 Complexity 3.非高斯性的度量3.1 峭度 Kurtosis 参考文献 blind source separation (BSS) 1. 算法原理简介 mixing得到signal mixture过程: x 1…...
从零开始之如何在React Native中使用导航
好的,让我们开始学习如何在React Native中使用导航。 安装React Navigation 首先,你需要安装React Navigation库。在项目文件夹中打开终端窗口,并运行以下命令: npm install react-navigation/native 或者 yarn add react-nav…...
RAW、RGB 、YUV三种图像格式理解
文章目录 1. 背景2. 相关概念2.1 颜色与色彩空间2.2 RAW图像2.3 RGB图像2.4 YUV图像 3. 分类简图 RAW、RGB 、YUV三种图像格式理解 1. 背景 在工作中,经常听到用来描述图像格式的RAW,RGB与YUV,但一直没有系统的进行了解,处于局部认…...
关于对【mysql存储过程】的理解与简述
【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130857854 出自【进步*于辰的博客】 【存储过程】这个知识点,我在大二下期学习【mys…...
贪吃蛇游戏的制作记录
关于蛇的实现代码 #include "snake.h" #include "globalvar.h" #include <graphics.h> int fangXiang 1;//方向 0 右 1 上 2 左 3 下 int snakeHang[100] { 10,11,12,13,14 };//蛇 每节所在行 int snakeLie[100] { 10,10,10,10,10 };//蛇 每节所…...
3步快速诊断法:BlenderGIS插件从崩溃到稳定运行的完整解决方案
3步快速诊断法:BlenderGIS插件从崩溃到稳定运行的完整解决方案 【免费下载链接】BlenderGIS Blender addons to make the bridge between Blender and geographic data 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderGIS BlenderGIS是一款强大的Blend…...
全球首创 XR+AGV 融合技术,超元力 XR 黑暗乘骑无轨AGV开启星际探险新纪元
传统黑暗乘骑项目长期受困于"被动观影"模式:游客坐在固定轨道车上观看预设影片,缺乏互动性,复购率低。广东超元力文化科技有限公司推出的全球首创 XR 黑暗乘骑无轨 AGV 产品,以 XRAGV 融合技术为核心,将被动…...
AI Agent Harness Engineering 反思机制3大实现路径:日志回溯 vs 强化学习 vs 人工反馈
AI Agent Harness Engineering 反思机制3大实现路径:日志回溯 vs 强化学习 vs 人工反馈 引言 痛点引入 想象一下:你花了整整两周,用 LangChain、AutoGPT 或者 LlamaIndex 搭了一个帮你写产品PRD草稿的AI Agent。你给它输入了竞品分析报告、用户访谈纪要、项目进度表,满心…...
COLMAP实战:如何用命令行搞定无人机航拍图像的三维重建?
COLMAP实战:如何用命令行搞定无人机航拍图像的三维重建? 无人机航拍技术正在彻底改变测绘、考古、农业和工程巡检等领域的工作方式。想象一下,你刚刚完成了一次大规模的无人机航拍任务,带回了数百甚至数千张高分辨率图像。这些图像…...
Android多媒体开发避坑:深入理解DMABUF机制与RK3588上的常见泄漏点
Android多媒体开发中的DMABUF机制解析与RK3588内存泄漏实战指南 在RK3588这类高性能芯片上开发视频编解码、相机等多媒体应用时,追求零拷贝性能优化往往会引入DMABUF的使用。然而,这种看似完美的解决方案背后隐藏着复杂的内存管理陷阱。本文将带您深入理…...
OpsKat v1.3.0 - SSH、数据库集中管理工具
平时操作服务器环境,经常要打开好几个工具来回切换,想着能不能直接跟 AI 说一句话就搞定,于是做了 OpsKat ,就算你不使用 AI 功能,常用的资产操作都集成在一起,也不用再在好几个工具之间跳了。举几个实际使…...
opencode使用安装
确保已经安装好node npm安装opencode C:\WINDOWS\system32>npm install -g opencode-aiadded 3 packages in 2mC:\WINDOWS\system32>npm安装mcp-chrome C:\WINDOWS\system32>npm...
谷歌“反重力”工具更新强行替换软件,用户恢复工作困难重重!
谷歌“反重力”工具更新强行替换软件,用户恢复工作困难重重!2026年5月21日,原本打算用“反重力”工具工作的用户,遭遇了谷歌的意外安排。前一天,谷歌在2026年I/O开发者大会上推出“反重力”工具新版本,将其…...
Keil调试中局部变量修改限制的解决方案
1. 问题现象与背景解析在嵌入式开发过程中,调试环节往往占据整个开发周期的40%以上时间。作为Keil Vision的资深用户,我最近在调试一个基于C166架构的通信协议栈时,遇到了一个看似简单却令人困扰的问题:当我在receive_data函数内部…...
迁移学习提升可穿戴设备睡眠监测精度的技术解析
1. 项目概述:迁移学习如何提升可穿戴设备的睡眠监测精度作为一名长期关注健康监测技术的从业者,我见证了可穿戴设备在睡眠监测领域的快速发展。但一个核心痛点始终存在:基于PPG(光电容积图)等外周生理信号的可穿戴设备…...
