【MyBatis】 ---- SqlSession运行原理总结

流程图

在这里插入图片描述

SqlSession执行过程通过Executor、StatementHandler、ParameterHandler和ResultSetHandler来完成数据库操作和结果返回的

  • Executor代表执行器:由它调度StatementHandler、ParameterHandler、ResultSetHandler等来执行对应的SQL
  • StatementHandler的作用是使用数据库的Statement(PreparedStatement)执行操作,是四大对象的核心,起到承上启下的作用,许多重要的插件都是通过拦截它来实现的
  • ParameterHandler是用来处理SQL参数的
  • ResultSetHandler是进行数据集(ResultSet)的封装返回处理的。

Executor-执行器:
MyBatis根据Configuration来构建StatementHandler,然后使用prepareStatement方法,对SQL编译和参数进行初始化。
实现过程:

  • 调用了StatementHandler的prepare()进行了预编译和基础的设置(比如超时、获取的最大行数的设置)
  • 然后通过StatementHandler的parameterize()来设置参数
  • 最后使用StatementHandler的query方法,吧ResultHandler传递进去

StatementHandler-数据库会话器
ParameterHandler-参数处理器
ResultSetHandler-结果处理器

总结

SqlSession是通过执行器Executor调度StatementHandler来运行的,而StatementHandler经过3步:

  • prepared预编译SQL
  • parameterize设置参数
  • query/update执行SQL

parameterize是调用parameterHandler的方法设置的,而参数是根据类型转换器typeHandler处理的。
query/update方法通过ResultSetHandler进行处理结果的封装,如果是update语句,就返回整数,否则就通过typeHandler处理结果类型,然后用ObjectFactory提供的规则组装对象,返回给调用者。

=================================================================================

TODO

追踪源码还是不太熟悉,还得加强,后续再将追踪的过程和代码图补上吧 太难了

发布了13 篇原创文章 · 获赞 0 · 访问量 147

猜你喜欢

转载自blog.csdn.net/whc__/article/details/105303706