- 0
- 0
- 约1.21万字
- 约 11页
- 2026-01-09 发布于贵州
- 举报
Spring整合Mybatis原理
Mybatis的基本⼯作原理
分析需要解决的问题
Spring中Bean的产⽣过程
解决问题
终极解决⽅案
FactoryBean
Import
总结
优化
作者:图灵学院周瑜
在介绍Spring整合Mybatis原理之前,我们得先来稍微介绍Mybatis的⼯作原理。
Mybatis的基本⼯作原理
在Mybatis中,我们可以使⽤⼀个接⼝去定义要执⾏sql,简化代码如下:
定义⼀个接⼝,@Select表示要执⾏查询sql语句。
1publicinterfaceUserMapper{
2@Select(select*fromuserwhereid#{id})
3UserselectById(Integerid);
4}
以下为执⾏sql代码:
1InputStreaminputStreamResources.getResourceAsStream(mybatis.x
ml);
2SqlSessionFactorysqlSessionFactorynewSqlSessionFactoryBuilder
().build(inputStream);
3SqlSessionsqlSessionsqlSessionFactory.openSession();
4
1
5//以下使我们需要关注的重点
6UserMappermappersqlSession.getMapper(UserMapper.class);
7Integerid1;
8Userusermapper.selectById(id);
Mybatis的⽬的是:使得程序员能够以调⽤⽅法的⽅式执⾏某个指定的sql,将执⾏sql的底层逻辑进⾏了封
装。
这⾥重点思考以下mapper这个对象,当调⽤SqlSession的getMapper⽅法时,会对传⼊的接⼝⽣成⼀个
代理对象,⽽程序要真正⽤到的就是这个代理对象,在调⽤代理对象的⽅法时,Mybatis会取出该⽅法所对
应的sql语句,然后利⽤JDBC去执⾏sql语句,最终得到结果。
分析需要解决的问题
Spring和Mybatis时,我们重点要关注的就是这个代理对象。因为整合的⽬的就是:把某个Mapper的代理
对象作为⼀个bean放⼊Spring容器中,使得能够像使⽤⼀个普通bean⼀样去使⽤这个代理对象,⽐如能
被@Autowire⾃动注⼊。
⽐如当Spring和Mybatis整合之后,我们就可以使⽤如下的代码来使⽤Mybatis中的代理对象了:
1@Component
2publicclassUserService{
3@Autowired
4privateUserMapperuserMapper;
5
6publicUsergetUserById(Integerid){
7returnuserMapper.selectById(id);
8}
9}
UserService中的userMapper属性就会被⾃动注⼊为Mybatis中的代理对象。如果你基于⼀个已经完成整
合的项⽬去调试即可发现,userMapper的类型为:
org.apache.ibatis.binding.MapperProxy@41a0aa7d。证明确实是Mybatis中的代理对象。
好,那么现在我们要解决的问题的就是:如何能够把Mybatis的代理对象作为⼀个bean放⼊Spring容器
中?
要解决这个,我们需要对Spring的bean⽣成过程有⼀个了解。
2
Spring中Bean的产⽣过程
Spring启动过程中,⼤致会经过如下步骤去⽣成bean
1.扫描指定的包路径下的class⽂件
2.根据class信息⽣成对应的BeanDefinition
3.在此处,程序员可以利⽤某些机制去修改BeanDefinition
4.根据BeanDefinition⽣
您可能关注的文档
最近下载
- TW-2型驼峰自动化系统培训课件.ppt VIP
- 九宫格数独题64道(入门级数独练习,初级简单).pdf VIP
- 林草行政执法培训课件.pptx VIP
- 陈春花管理学著作精华解读全集《管理地常识》《领先之道》等10本书.docx
- 1TW-2型驼峰控制系统 .pptx VIP
- 外科学(总论) 输血的基本要求、输血 输血.ppt VIP
- 燃气调压站设备设施风险分级管控清单.pdf VIP
- 浅析石油化工工程造价管理要点及优化策略.docx VIP
- 高频精选:中国交建招聘面试题及答案.doc VIP
- 2025年高考作文素材积累之 “人工智能”金句+标题+角度+人民日报时评+语段+范文.docx VIP
原创力文档

文档评论(0)