Java MyBatis 怎么集成 Spring 框架通过 SqlSessionFactoryBean 统一管理

胖杰酱_9754

胖杰酱_9754

2026-09-12

116人浏览

原创

mybatis集成spring的核心是sqlsessionfactorybean托管sqlsessionfactory;必须显式设置datasource,否则启动报nouniquebeandefinitionexception;需通过setmapperlocations指定xml路径或用@mapperscan扫描接口;事务管理器须复用同一datasource。

java mybatis 怎么集成 spring 框架通过 sqlsessionfactorybean 统一管理

MyBatis 集成 Spring 的核心,是把 SqlSessionFactory 交由 Spring IoC 容器托管,而 SqlSessionFactoryBean 就是实现这一托管的关键工厂类——它不是最终的 SqlSessionFactory 实例,而是一个能生产该实例的 Spring FactoryBean。

SqlSessionFactoryBean 必须显式绑定数据源

Spring 容器中若存在多个 DataSource(如主从库、多租户场景),SqlSessionFactoryBean 不会自动选择;若未显式调用 setDataSource(),启动时将抛出 NoUniqueBeanDefinitionException

  • XML 配置中:确保 <property name="dataSource" ref="myDataSource"></property>ref 值与目标 <bean id="myDataSource"></bean> 完全一致
  • JavaConfig 中:直接传入已声明的 @Autowired DataSource dataSource,避免字段注入或构造器未传参
  • 切勿依赖 @Autowired 自动装配该属性——这是最常被忽略却导致启动失败的配置点

SqlSessionFactoryBean 要正确暴露 SqlSessionFactory 实例

SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口,其 getObject() 方法在容器初始化后期被调用,返回真正的 SqlSessionFactory。同时它也实现了 InitializingBean,会在属性设置完成后执行 afterPropertiesSet(),完成 XML 映射文件加载、类型别名注册等初始化动作。

openclaw session viewer
openclaw session viewer

生成交互式 HTML 查看器,用于审查和分析 OpenClaw 对话会话,包含历史、工具调用、令牌使用和调试细节。

下载
  • Mapper XML 文件路径需通过 setMapperLocations() 显式指定,例如:new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml")
  • 若使用注解方式(如 @Select),可省略 XML 路径,但必须保证 Mapper 接口被正确扫描
  • 该 Bean 在容器中默认以方法名(如 sqlSessionFactory)为 beanName,Service 层可通过 @Autowired SqlSessionFactory 直接注入(较少见),更常用的是注入 Mapper 接口

Mapper 接口需由 Spring 代理并注入容器

MyBatis 的 Mapper 接口本身没有实现类,Spring 通过 MapperScannerConfigurer(XML)或 @MapperScan(注解)自动扫描接口,为每个接口生成动态代理对象,并注册为 Spring Bean。

  • @MapperScan("com.example.mapper") 应写在配置类上,包路径要准确,不支持 Ant 风格通配符如 com.**.mapper
  • 代理对象底层依赖 SqlSessionFactory,因此必须确保 SqlSessionFactoryBean 已初始化完成——Spring 会自动处理这个依赖顺序
  • DAO 层不再需要手动 new SqlSession 或调用 getMapper(),Service 层可直接 @Autowired UserMapper userMapper

事务管理器必须与 SqlSessionFactory 共享同一 DataSource

事务能否生效,取决于 DataSourceTransactionManager 是否使用和 SqlSessionFactoryBean 完全相同的 DataSource 实例。

  • 务必使用 org.springframework.jdbc.datasource.DataSourceTransactionManager,而非 JtaTransactionManager(后者适用于分布式事务,对单数据源无效且静默失效)
  • XML 中检查:<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="myDataSource"></property></bean>
  • JavaConfig 中应复用同一个 dataSource 对象:return new DataSourceTransactionManager(dataSource);
  • 事务注解 @Transactional 只在 Spring 代理的方法上调用才有效,自调用(this.method())不会触发事务

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java session

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

8597

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

5802

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

5232

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

964

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

808

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1136

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2269

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19631

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1035

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习