MyBatis_运行原理

注:本笔记是根据尚硅谷的MyBatis视频记录的

一、Mybatis架构图

二、Mybatis的工作原理

三、Mybatis的运行原理源码分析

Mybatis执行数据库查询时,我们需要编写的代码:

一共分为四步:

  • 获取sqlSessionFactory对象
  • 获取sqlSession对象
  • 获取接口的实现类mapper代理对象
  • 接口的实现类对象执行数据库方法进行增删改查操作
​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);
        //4、接口的实现类对象执行数据库方法进行增删改查操作
		Employee employee = mapper.getEmpById(1);
		System.out.println(mapper);
		System.out.println(employee);
	} finally {
		openSession.close();
	}

}

那运行原理就按这四步依次debug进行分析......

1、获取sqlSessionFactory对象

解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSession;
注意:【MappedStatement】:代表一个增删改查的详细信息

其中:

Configuration对象保存了所有配置文件的详细信息:

mapperdStatements对象:

knownMappers对象:

2、获取sqlSession对象

返回一个DefaultSQlSession对象,包含Executor和Configuration;
这一步会创建Executor对象;

3、获取接口的实现类mapper代理对象(MapperProxy)

getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象
代理对象里面包含了,DefaultSqlSession(Executor)

4、接口的实现类对象执行数据库方法进行增删改查操作

boundSql对象:

缓存中保存的key:方法id+sql+参数xxx:

四、查询流程总结

(1)、根据配置文件(全局,sql映射)初始化出Configuration对象
(2)、创建一个DefaultSqlSession对象,
    他里面包含Configuration以及
    Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor)
(3)、DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy;
(4)、MapperProxy里面有(DefaultSqlSession);
(5)、执行增删改查方法:
        1)、调用DefaultSqlSession的增删改查(Executor);
        2)、会创建一个StatementHandler对象。
            (同时也会创建出ParameterHandler和ResultSetHandler)
        3)、调用StatementHandler预编译参数以及设置参数值;
            使用ParameterHandler来给sql设置参数
        4)、调用StatementHandler的增删改查方法;
        5)、ResultSetHandler封装结果
注意:
    四大对象每个创建的时候都有一个interceptorChain.pluginAll(parameterHandler);

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值