news 2026/6/15 15:16:17

MyBatis基础入门《十》Spring Boot 整合 MyBatis:从单数据源到多数据源实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis基础入门《十》Spring Boot 整合 MyBatis:从单数据源到多数据源实战

一、快速集成:单数据源配置

1. 添加 Maven 依赖

<dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis Starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.3</version> <!-- 注意:适配 Spring Boot 3.x --> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies>

🔔 注意:

  • Spring Boot 3.x 需使用mybatis-spring-boot-starter3.x+
  • 若用 Spring Boot 2.x,请降级到 2.3.x。

2. 配置application.yml

spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml # XML 文件位置 type-aliases-package: com.charles.entity # 实体类别名包 configuration: map-underscore-to-camel-case: true # 下划线转驼峰 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台打印 SQL

3. 编写实体类 & Mapper

// User.java package com.charles.entity; public class User { private Integer id; private String username; // getter / setter }
// UserMapper.java package com.charles.mapper; import com.charles.entity.User; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper // 👈 关键注解! public interface UserMapper { User selectById(Integer id); void insert(User user); }

✅ 两种注册 Mapper 方式(二选一):

  1. 在每个 Mapper 接口上加@Mapper
  2. 在启动类上加@MapperScan("com.charles.mapper")(推荐,避免重复注解)。

4. Service 层 + 事务控制

@Service public class UserService { @Autowired private UserMapper userMapper; // ✅ 自动开启事务(默认 REQUIRED) @Transactional public void createUser(User user) { userMapper.insert(user); // 模拟异常:若此处出错,insert 会回滚 if (user.getUsername().contains("error")) { throw new RuntimeException("模拟异常"); } } public User getUser(Integer id) { return userMapper.selectById(id); // 只读,无需事务 } }

💡 Spring 的@Transactional与 MyBatis 完美协作,无需手动 commit/rollback!


二、进阶:配置多数据源(Multi-DataSource)

场景说明

  • 主库(master):写操作(订单、用户注册)
  • 从库(slave):读操作(报表、查询)

步骤 1:添加两个数据源配置

spring: datasource: master: jdbc-url: jdbc:mysql://localhost:3306/master_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver slave: jdbc-url: jdbc:mysql://localhost:3306/slave_db username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver

⚠️ 注意:Spring Boot 2.7+ 使用jdbc-url而非url(HikariCP 要求)。


步骤 2:创建主从数据源配置类

// MasterDataSourceConfig.java @Configuration @MapperScan( basePackages = "com.charles.mapper.master", sqlSessionFactoryRef = "masterSqlSessionFactory" ) public class MasterDataSourceConfig { @Bean @Primary // 主数据源 @ConfigurationProperties("spring.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean @Primary public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource ds) throws Exception { SqlSessionFactoryBean factory = new SqlSessionFactoryFactoryBean(); factory.setDataSource(ds); factory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/master/*.xml")); return factory.getObject(); } @Bean @Primary public SqlSessionTemplate masterSqlSessionTemplate( @Qualifier("masterSqlSessionFactory") SqlSessionFactory sf) { return new SqlSessionTemplate(sf); } }
// SlaveDataSourceConfig.java(类似,去掉 @Primary,包路径改为 slave)

步骤 3:按用途划分 Mapper 包

src/main/java └── com.charles.mapper ├── master │ └── UserWriteMapper.java // 写操作 └── slave └── UserReadMapper.java // 读操作

✅ 这样,写操作走主库,读操作走从库,实现读写分离!


三、常见问题 & 最佳实践

❓ Q1:启动报错 “No qualifying bean of type 'XXXMapper'”?

  • 原因:未正确扫描 Mapper 接口;
  • 解决:检查@MapperScan包路径是否包含 Mapper 所在包。

❓ Q2:事务不生效?

  • 原因1:方法非 public;
  • 原因2:自调用(this.method());
  • 原因3:异常被捕获未抛出;
  • ✅ 解决:确保@Transactional方法被外部调用,且抛出 RuntimeException。

✅ 最佳实践

  • 使用@MapperScan统一管理,避免每个接口加@Mapper
  • 多数据源时,严格分离读写 Mapper 包;
  • 生产环境关闭log-impl,改用日志框架(如 Logback)记录 SQL;
  • 结合DruidHikariCP监控连接池状态。

四、扩展:整合 PageHelper 分页插件

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.7</version> </dependency>

使用:

public List<User> getUsers(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); return userMapper.selectAll(); // 自动分页 }

🌟 无需修改 SQL,一行代码实现物理分页!


五、总结

能力Spring Boot + MyBatis 实现方式
单数据源mybatis-spring-boot-starter+application.yml
事务管理@Transactional(由 Spring 管理)
多数据源多个DataSource+@MapperScan分包
分页PageHelper Starter
SQL 日志mybatis.configuration.log-impl

核心优势
“零 XML 配置、自动事务、无缝整合、生产就绪!”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:49:32

青少年编程竞赛怎么准备?刷题、复盘与社区交流的重要性

青少年编程竞赛怎么准备&#xff1f;刷题、复盘与社区交流的重要性内容概要编程能力评估的核心价值在于促进系统性学习&#xff0c;需注意避免单纯追求证书的倾向&#xff1b;选择评估体系时可关注其权威性、科学性与实用性&#xff1b;竞赛准备需要系统化规划&#xff0c;将能…

作者头像 李华
网站建设 2026/6/15 13:43:38

智能缓存优化测试数据的策略与实践

缓存测试数据&#xff1a;软件测试的新维度 在当今高速迭代的软件开发环境中&#xff0c;测试数据管理已成为影响测试效率与质量的关键因素。智能缓存优化测试数据不再是简单的数据复用技术&#xff0c;而是融合了数据分析、预测算法和资源调度的综合性解决方案。对软件测试从…

作者头像 李华
网站建设 2026/6/15 10:45:12

AI 重构招聘格局:企业应对候选人“AI 升级”的破局之道

AI 重构招聘格局&#xff1a;企业应对候选人“AI 升级”的破局之道AI得贤招聘官校招季的一组数据正悄然改写招聘生态&#xff1a;近 40% 的毕业生在校招期间投递岗位超 50 个&#xff0c;更关键的是&#xff0c;候选人已率先在简历优化、面试准备、自我提升等环节主动运用 AI 工…

作者头像 李华
网站建设 2026/6/15 13:44:16

DeepSeek-R1-Distill-Qwen-7B终极使用指南:从入门到精通

DeepSeek-R1-Distill-Qwen-7B终极使用指南&#xff1a;从入门到精通 【免费下载链接】DeepSeek-R1-Distill-Qwen-7B 探索深度学习新境界&#xff0c;DeepSeek-R1-Distill-Qwen-7B模型以卓越推理能力引领潮流&#xff0c;显著提升数学、编程和逻辑任务表现&#xff0c;开启AI智能…

作者头像 李华
网站建设 2026/6/14 21:40:52

用小模型办大事!阿里团队用Qwen3-0.6B打造简历求职神器!

阿里团队推出SmartResume智能简历解析系统&#xff0c;使用微调的Qwen3-0.6B小模型和YOLOv10版面检测模型&#xff0c;可在十秒内高效解析简历PDF文件。系统能提取基本信息、工作经历、教育背景等结构化信息&#xff0c;通过版面检测重建阅读顺序&#xff0c;将内容稳定转换为结…

作者头像 李华
网站建设 2026/6/11 6:24:57

抖音电商资源合集 第二辑

抖音运营资料包合集 文件大小: 23.1GB内容特色: 23.1GB抖音运营全流程资料包适用人群: 电商/自媒体运营、短视频创业者核心价值: 快速复制爆款套路提升GMV下载链接: https://pan.quark.cn/s/7fc9d6d9132a ##电商运营课程 文件大小: 72.1GB内容特色: 72GB全链路电商实战&…

作者头像 李华