Mybatis是一个ORM框架,ORM是( Object Relational Mapping )的简写,翻译过来就是 对象-关系映射 ,简单来说就是把数据库和实体类及实体类的属性对应起来,让我们可以操作实体类就能实现操作数据库。
在分析底层原理之前,先看单独使用Mybatis时的执行流程:
1 | public class MybatisTest { |
以下是我通过debug调试得到的结果:
抛开我们使用mybatis时这几步执行流程来说,在mybatis底层最重要的两个对象就是configuration
和transaction
。
configuration是mybatis配置对象,它是用来存储从xml配置文件中解析得到的所有数据,它里面有非常重要的三个属性:
- environment
- mapperRegistry
- mappedStatements
transaction是mybatis的事务管理对象,如果在配置文件中配置了事务管理,那么由同一个sqlSession创建的代理对象,在执行CRUD操作时每次获取到的connection将会是同一个,属性如下:
- connection
- dataSource
- level
- autoCommit
这两个对象创建的时机:
configuration
对象在创建sqlSessionFactoryBuild
时进行创建,transaction
对象在创建sqlSession
时创建,并且transaction
中包含有configuration
对象,不同的sqlSession
它的transaction
也不相同,但是configuration
对象是同一个。