Mybatis的底层原理分析

本文介绍了MyBatis框架的基本概念与执行流程,详细解释了Configuration与Transaction两个核心组件的作用及其创建时机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis是一个ORM框架,ORM是( Object Relational Mapping )的简写,翻译过来就是 对象-关系映射 ,简单来说就是把数据库和实体类及实体类的属性对应起来,让我们可以操作实体类就能实现操作数据库。

在分析底层原理之前,先看单独使用Mybatis时的执行流程:

public class MybatisTest {
    /**
     * 入门案例
     * @param
     */
    @Test
    public void test1() throws IOException {
        //1.读取主配置文件
        InputStream is = Resources.getResourceAsStream ( "mybatis.xml" );
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder ( );
        SqlSessionFactory factory = builder.build ( is );
        //3.使用工厂生产一个SqlSession对象
        SqlSession sqlSession = factory.openSession ( );
        //4.使用SqlSession创建Dao接口的代理对象
        UserDao userDao = sqlSession.getMapper ( UserDao.class );
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll ( );

        /*String sqlId = "com.itheima.dao.UserDao"+"."+"findAll";
        List<User> users = sqlSession.selectList ( sqlId );*/
        for (User user : users) {
            System.out.println (user );
        }
        //6.释放资源
        sqlSession.close ();
        is.close ();
    }
}

以下是我通过debug调试得到的结果:

抛开我们使用mybatis时这几步执行流程来说,在mybatis底层最重要的两个对象就是configurationtransaction

configuration是mybatis配置对象,它是用来存储从xml配置文件中解析得到的所有数据,它里面有非常重要的三个属性:

  • environment
  • mapperRegistry
  • mappedStatements

transaction是mybatis的事务管理对象,如果在配置文件中配置了事务管理,那么由同一个sqlSession创建的代理对象,在执行CRUD操作时每次获取到的connection将会是同一个,属性如下:

  • connection
  • dataSource
  • level
  • autoCommit

这两个对象创建的时机:

configuration对象在创建sqlSessionFactoryBuild时进行创建,transaction对象在创建sqlSession时创建,并且transaction中包含有configuration对象,不同的sqlSession它的transaction也不相同,但是configuration对象是同一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值