sqlSession会话创建

Mybatis - 从0到1 源码学习 - 图1
源码调用图如上,下面放出uml,来自尚硅谷。
image.png

openSession开启一次数据库会话

image.png

getMapper返回接口的代理对象

image.png

执行查询

image.png

查询流程总结

image.png

  • 仅看图,基本无用,需要自己debug一步一步跟代码,之后再结合图来进行理解。 ```java

mybatis 工作原理

/**

  1. * 1、获取sqlSessionFactory对象:
  2. * 解析文件的每一个信息保存在Configuration中,返回包含ConfigurationDefaultSqlSession
  3. * 注意:【MappedStatement】:代表一个增删改查的详细信息
  4. *
  5. * 2、获取sqlSession对象
  6. * 返回一个DefaultSQlSession对象,包含ExecutorConfiguration;
  7. * 这一步会创建Executor对象;
  8. *
  9. * 3、获取接口的代理对象(MapperProxy
  10. * getMapper,使用MapperProxyFactory创建一个MapperProxy的代理对象
  11. * 代理对象里面包含了,DefaultSqlSessionExecutor
  12. * 4、执行增删改查方法
  13. *
  14. * 总结:
  15. * 1、根据配置文件(全局,sql映射)初始化出Configuration对象
  16. * 2、创建一个DefaultSqlSession对象,
  17. * 他里面包含Configuration以及
  18. * Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor
  19. * 3DefaultSqlSession.getMapper():拿到Mapper接口对应的MapperProxy
  20. * 4MapperProxy里面有(DefaultSqlSession);
  21. * 5、执行增删改查方法:
  22. * 1)、调用DefaultSqlSession的增删改查(Executor);
  23. * 2)、会创建一个StatementHandler对象。
  24. * (同时也会创建出ParameterHandlerResultSetHandler
  25. * 3)、调用StatementHandler预编译参数以及设置参数值;
  26. * 使用ParameterHandler来给sql设置参数
  27. * 4)、调用StatementHandler的增删改查方法;
  28. * 5)、ResultSetHandler封装结果
  29. * 注意:
  30. * 四大对象每个创建的时候都有一个interceptorChain.pluginAll(parameterHandler);
  31. *
  32. * @throws IOException
  33. */

```

四大对象

StatementHandler:处理sql语句预编译,设置参数等相关工作
ParameterHandler:设置预编译参数用的
ResultHandler:处理结果集
Executor:它是一个执行器,真正进行java与数据库交互的对象