MyBatis工作原理分析(一)

向一个springboot项目中整合mybatis很简单,一般只需要两步:

1.引入mybatis依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>

2.在资源文件application.yml或propeties中定义好配置信息

网上的教程很多这里过程不赘述了...

打开刚刚引入的jar包 mybatis-spring-boot-starter,你会发现没什么东西,在spring.provides中发现这里指向了另一个jar:provides: mybatis-spring-boot-autoconfigure

 打开 MybatisAutoConfiguration.class文件,在这里做了很多事情:

@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisAutoConfiguration {
    private static Log log = LogFactory.getLog(MybatisAutoConfiguration.class);
    @Autowired
    private MybatisProperties properties;
    @Autowired(
        required = false
    )
。。。

第一:当SqlSessionFactory 和 SqlSessionFactoryBean 位于类路径上时,实例化这两个bean;

第二:当上下文中存在 DataSource对象时,实例化这个bean;

第三:在BeanDefinitions中创建 MybatisProperties对象;

第四:MybatisAutoConfiguration这个类放在 DataSourceAutoConfiguration之后加载。

首先分析DataSourceAutoConfiguration:

在这里他做的第一件事就是实例化 DataSource对象,然后从资源文件中拿到 spring.database 配置信息并初始化到DataSourceProperties对象。

随后调用 dataSourceInitializer 方法,将DataSource初始化。

这里不了解bean对象的实例化和初始化过程的可以参考:https://blog.csdn.net/qq_15037231/article/details/105938673

DataSourceAutoConfiguration 事情做完后开始加载 MybatisAutoConfiguration类,

初始化 SqlSessionFactory 会话工厂类,

初始化临时会话 SqlSessionTemplate。

扫描项目中@Mapper的文件为其创建bean并加入BeanDefinition

到此发现,数据库的配置信息和所有的持久层Mapper接口都在spring封装成了bean。

那么具体是怎么执行sql的呢?

待下回分解,先处理一波工作。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一款优秀的持久层框架,采用了ORM(对象关系映射)的思想,将Java对象和数据库表结构进行映射,使得操作数据库更加方便和简洁。 MyBatis的源码原理主要包括以下几个方面: 1. SqlSessionFactory的创建和初始化:SqlSessionFactory是MyBatis的核心接口,它负责创建SqlSession对象,SqlSession是与数据库交互的主要接口。SqlSessionFactory的创建是通过XML或Java代码配置文件来实现的,其中包括数据源、事务管理器等。SqlSessionFactory的初始化过程是通过解析配置文件,将配置信息加载到Configuration对象中,然后创建SqlSessionFactoryBuilder对象,通过它来构建SqlSessionFactory。 2. SqlSession的创建和生命周期管理:SqlSession是与数据库交互的主要接口,它封装了对数据库的操作,包括查询、插入、更新、删除等。SqlSession的创建是通过SqlSessionFactory来实现的,它采用了工厂模式,通过SqlSessionFactory.openSession()方法获取SqlSession对象。SqlSession的生命周期管理包括开启事务、提交事务、回滚事务等操作。 3. Mapper接口的代理实现:Mapper接口是MyBatis的另一个核心接口,它定义了数据库操作的方法,例如查询、插入、更新、删除等。Mapper接口的实现是通过动态代理来实现的,MyBatis会根据Mapper接口的定义生成一个代理类,代理类会拦截Mapper接口的方法调用,并将其转化为对SqlSession的调用,最终将操作转化为对数据库的操作。 4. SQL语句的解析和执行:MyBatis支持通过XML或注解的方式定义SQL语句,通过SqlSession对象调用Mapper接口的方法时,MyBatis会根据Mapper接口的定义和XML或注解文件解析出对应的SQL语句,然后执行SQL语句,并将结果转化为对应的Java对象。 5. 缓存的实现和管理:MyBatis支持一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,用于缓存在同一个SqlSession中多次查询同一条记录的结果。二级缓存是Mapper级别的缓存,用于缓存在多个SqlSession中多次查询同一条记录的结果。MyBatis的缓存实现是通过Cache接口来实现的,缓存的管理是通过Configuration对象来实现的。 总的来说,MyBatis的源码原理涉及到了很多方面,包括配置文件的解析、动态代理、SQL语句的解析和执行、缓存等。了解这些原理有助于更好地理解和使用MyBatis

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值