Mybatis之原理1,步骤2,根据配置文件创建SqlS

1,步骤

一般mybatis的使用有以下4步。

1、获取sqlSessionFactory对象:

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

2、获取sqlSession对象

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

3、获取接口的代理对象(MapperProxy)

  • getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象

  • 代理对象里面包含了,DefaultSqlSession(Executor)

4、执行增删改查方法

代码示例

@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();
		}

	}
复制代码

2,根据配置文件创建SqlSessionFactory

基本上就是将主配置文件进行解析之后保存到全局配置Configuration对象中,再将映射文件的每一个增删改查标签的每一个属性都解析出来封装成一个MappedStatement

image.png

3,获取sqlSession对象

返回SqlSession的实现类DefaultSqlSession对象。里面包含了Executor和Configuration

image.png

4,返回接口代理对象

基本也是利用了JDK动态代理。

952096a902f847e8930a0004308e8903_tplv-k3u1fbpfcp-watermark.png
image.png

5,查询流程

完整流程

image.png

查询总结

image.png

6,完整总结(掌握)

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);

7,Mybatis总览

最后附上一个mybatis总览帮助理解

image.png