Spring整合Mybatis原理解读.pdfVIP

  • 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⽣

文档评论(0)

1亿VIP精品文档

相关文档