MyBatis-Spring-Boot快速上手指南
以下内容是关于 MyBatis-Spring-Boot-Starter 的官方文档或技术说明。下面我将用中文为你详细解释这个工具是什么、它的作用、如何使用,以及关键概念的通俗理解。
一、什么是 MyBatis-Spring-Boot-Starter?
简单来说:
MyBatis-Spring-Boot-Starter 是一个“启动器”(Starter),它让 Spring Boot 项目可以非常方便地集成 MyBatis 框架来操作数据库。
✅ 核心目标:
- 快速搭建基于 Spring Boot 的 MyBatis 应用。
- 减少配置(几乎不需要写 XML)。
- 实现 自动装配(Auto-configuration),像魔法一样帮你把 MyBatis 的组件准备好。
二、它能帮你做什么?(好处)
使用这个 Starter 后,Spring Boot 会自动完成以下事情:
功能 | 说明 |
---|---|
🔍 自动检测数据源 | 只要你在 application.yml 配置了数据库连接,它就能找到 DataSource |
🏗️ 创建 SqlSessionFactory | 不用手动 new 一个 SqlSessionFactoryBean |
💾 创建 SqlSessionTemplate | 线程安全的 MyBatis 操作模板 |
🧩 自动扫描 Mapper 接口 | 扫描所有 @Mapper 注解的接口,并注册为 Spring Bean |
⚙️ 减少 XML 配置 | 大部分配置可以通过 application.properties 或 Java 代码完成 |
👉 结果:你只需要写一个 Mapper 接口 + SQL,就可以直接在 Service 中注入使用!
三、快速上手示例(看懂就够了)
1. 添加依赖(Maven)
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.4</version>
</dependency>
2. 写一个 Mapper 接口
@Mapper
public interface CityMapper {@Select("SELECT * FROM CITY WHERE state = #{state}")City findByState(@Param("state") String state);
}
3. 在主类中使用(自动注入)
@SpringBootApplication
public class SampleMybatisApplication implements CommandLineRunner {private final CityMapper cityMapper;public SampleMybatisApplication(CityMapper cityMapper) {this.cityMapper = cityMapper;}public static void main(String[] args) {SpringApplication.run(SampleMybatisApplication.class, args);}@Overridepublic void run(String... args) {System.out.println(cityMapper.findByState("CA")); // 直接调用!}
}
✅ 不需要任何 XML 配置!Spring Boot 自动帮你完成了所有底层设置。
四、核心机制详解(进阶理解)
1. 自动扫描 Mapper 的原理
- 默认情况下,它会查找所有加了
@Mapper
的接口,并将其注册为 Spring Bean。 - 如果你想自定义扫描路径或使用别的注解,可以用
@MapperScan
:
@SpringBootApplication
@MapperScan("com.example.mapper") // 指定包路径
public class App { ... }
2. 使用 SqlSession
手动操作(不推荐常用)
虽然推荐用 Mapper 接口,但你也可以直接使用 SqlSession
:
@Component
public class CityDao {private final SqlSession sqlSession;public CityDao(SqlSession sqlSession) {this.sqlSession = sqlSession;}public City selectCityById(long id) {return sqlSession.selectOne("selectCityById", id);}
}
这种方式更接近原生 MyBatis,但失去了接口的类型安全和简洁性。
五、配置项详解(application.yml
)
MyBatis 的配置都以 mybatis.
开头:
mybatis:type-aliases-package: com.example.domain.model # 别名包,不用写全类名type-handlers-package: com.example.typehandler # 类型处理器mapper-locations: classpath:mapper/*.xml # XML 映射文件位置configuration:map-underscore-to-camel-case: true # 下划线转驼峰命名default-fetch-size: 100default-statement-timeout: 30
常见配置说明:
配置项 | 作用 |
---|---|
type-aliases-package | 简化实体类别名,比如 User 代替 com.example.User |
mapper-locations | 指定 XML 映射文件的位置(如 <select> 写在 XML 里) |
map-underscore-to-camel-case | 数据库字段 user_name → Java 属性 userName |
configuration.* | 直接设置 MyBatis 核心配置 |
⚠️ 注意:如果用了
config-location
(指定 mybatis-config.xml 文件),就不能再用configuration.*
,两者冲突。
六、高级功能(可选了解)
1. 使用 ConfigurationCustomizer
自定义配置
如果你想在自动配置的基础上修改 MyBatis 行为,可以用这个接口:
@Bean
public ConfigurationCustomizer configurationCustomizer() {return configuration -> {configuration.setLazyLoadingEnabled(true); // 开启懒加载configuration.setAggressiveLazyLoading(false);};
}
这比写 XML 更灵活,适合动态配置。
2. 使用 SqlSessionFactoryBeanCustomizer
用于定制 SqlSessionFactoryBean
对象本身(比如设置插件、VFS 等)。
@Bean
public SqlSessionFactoryBeanCustomizer customizer() {return factoryBean -> {factoryBean.setPlugins(new MyInterceptor()); // 添加拦截器};
}
3. 使用 SpringBootVFS
(重要!打包时要用)
当你把项目打成 jar 包运行时,MyBatis 默认的类加载机制可能找不到 Mapper 接口或 XML 文件。
解决办法:使用 SpringBootVFS
:
factoryBean.setVfs(SpringBootVFS.class); // 告诉 MyBatis 用 Spring Boot 的方式找文件
Starter 已经自动帮你设置了,但如果你手动创建多个
SqlSessionFactory
(比如多数据源),就需要自己加上这一句。
七、版本兼容性(重点!别用错)
Starter 版本 | Spring Boot 版本 | Java 版本 |
---|---|---|
3.0.x | 3.0 - 3.4 | 17+ |
2.3.x | 2.7 | 8+ |
2.2.x | 2.5 - 2.7 | 8+ |
1.x | 1.3 - 2.1 | 6+ |
❗ 注意: 你的 Spring Boot 版本必须和 Starter 匹配,否则会报错!
例如:
- 你用的是 Spring Boot 3.0+ → 必须用
mybatis-spring-boot-starter:3.0.4
- 你还用 Java 8 → 不能用 3.x 版本(需要 Java 17+)
八、总结:一句话理解
MyBatis-Spring-Boot-Starter 就像一个“快捷安装包”,让你在 Spring Boot 项目中只需写 Mapper 接口和 SQL,剩下的(数据源、工厂、会话、扫描)全部自动搞定,真正做到开箱即用。
九、适合人群
人群 | 是否推荐 |
---|---|
Spring Boot 新手 | ✅ 推荐!简单易上手 |
想摆脱 XML 配置的人 | ✅ 强烈推荐 |
需要多数据源、复杂配置的项目 | ✅ 可用,但需结合手动配置 |
坚持用 XML 写 SQL 的团队 | ✅ 也支持,通过 mapper-locations |
如果你正在做一个 Spring Boot + MyBatis 的项目,强烈建议使用 mybatis-spring-boot-starter
,它可以极大提升开发效率,减少出错概率。
需要我根据你的项目结构生成具体配置示例吗?欢迎提供 Spring Boot 版本和需求 😊