MyBatis运行原理

MyBatis运行原理

在学习运行原理之前,我们先来梳理一下使用MyBatis的步骤,我们从最简单的开始,一步一步往下看

  1. 获取sqlSessionFactory对象
  2. 获取sqlSession对象
  3. 获取接口的实现类对象
  4. 执行CRUD操作
	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

	@Test
	public void test01() throws IOException {
		// 1、获取sqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		// 2、获取sqlSession对象
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			// 3、获取接口的实现类对象
			//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
			Employee employee = mapper.getEmpById(1);
			System.out.println(mapper);
			System.out.println(employee);
		} finally {
			openSession.close();
		}
	}

获取sqlSessionFactory对象

configuration封装了所有配置文件的详情信息,mybatis是将配置文件的信息解析并保存在Configuration对象中,返回包含了Configuration的DefaultSqlSession对象。

sqlSessionFactory是一个接口,而DefaultSqlSession实现了这个接口的方法

在这里插入图片描述

获取sqlsession对象

返回sqlsession的实现类defaultSqlSession对象,里面包含了configuration和executor,executor会在这一步被创建

在这里插入图片描述

获取接口的实现类对象

获取接口的实现类对象,通过测试、观察源码可以发现这是获取了一个代理对象

在这里插入图片描述

执行CRUD操作

在这里插入图片描述

总结

  1. 通过配置文件(全局配置文件、mapper映射文件),初始化configuration对象,并将所有信息存储在此对象中

  2. 创建一个DefaultSqlSession对象,其中包含configuration对象以及全局配置文件中设置类型对应的Executor对象

  3. DefaultSqlSession.getMapper(type),拿到接口相对于的代理类对象MapperProxy

  4. MapperProxy中包含DefaultSqlSession,理所当然也包含了configuration和Executor

  5. 执行CRUD操作

    1. 调用DefaultSqlSession对象的CRUD操作,其内部调用了Executor的CRUD操作

    2. 创建一个StatementHandler对象(同时也会创建ParameterHandler和ResultSetHandler)

    3. 调用StatementHandler,处理sql语句预编译、设置预编译的参数

      ​ 其中使用ParameterHandler来设置参数

    4. 调用StatementHandler的CRUD操作

    5. 使用ResultSetHandler封装结果

注意:四大类中每一个类的创建都会执行一次包装语句,这个在插件的时候会学到

例如(Executor)

Executor executor = (Executor)this.interceptorChain.pluginAll(executor);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值