(1)介绍了(1)SqlSession的简单原理
SqlSession提供选择/插入/更新/删除方法。在旧版本中,这些方法使用了SqlSession接口,但是在Mybatis的新版本中,建议使用Mapper接口。
Mapper实际上是一个动态的代理对象,只需输入MapperMethod的执行方法,就可以简单的找到SqlSession的删除、更新、查询和选择方法。从底层实现来看:使用动态代理技术,让接口运行,然后采用命令模式,最后使用SqlSession的接口方法(getmapper()方法,等待Mapper)执行SQL查询(也就是说Mapper接口方法的底层还是用SqlSession接口方法实现)
注意:虽然以上只是简单的描述,但实际上源代码比较复杂。以下将以源代码为基础简单介绍一下!
(2)二进制会话的四个重要对象
1)执行:调度StatementHandler、ParmmeterHandler、ResultHandler执行相应的SQL语句;
2)statementandler:使用数据库中的语句(prepareStatement)来执行操作,即底层是封装的prepare Statement;
3)parameterthandler:处理SQL参数;
4)ResultHandler:对结果集进行打包处理并返回。
执行者起着至关重要的作用。它是真正执行Java与数据库交互的东西,参与整个SQL查询执行过程。
1)执行机构主要有三种:SIMPLE执行机构(未配置为默认执行机构)、REUSE为可重复使用的预处理语句、batch批量更新、BATCH专用处理器
2) Executor函数:Executor首先会调用StatementHandler的prepare()方法预编译SQL语句并设置一些基本的运行参数,然后调用StatementHandler的parameterize()方法(其实是启用ParameterHandler来设置参数)来设置参数。结果处理程序重组查询结果,并将其返回给调用者。在完成查询和预编译之后,它简单地总结为先预编译该语句,然后设置参数(类似于JDBC的准备语句过程)。最后,如果有查询结果,它将被组装并返回。首先,以SimpleExecutor为例,看一下源代码,我们得到以下重要知识点:
首先,通过从配置对象的newExecutor()方法中选择相应的执行器来生成执行器
(注意:最后,动态代理的层是在interceptorChain.pluginAll()中执行的。最后,在调用真正的Executor之前可以修改插件代码,这也是为什么学Mybatis的插件一定要知道SqlSession的运行过程。)
第二:StatementHandler是根据执行器中的配置构建的
第三,执行器将执行StatementHandler的prepare()方法预编译——填入连接对象和其他参数——然后调用parameterize()方法设置参数——完成预编译
综上所述,画一个简单的思维图如下:
(其中:getParameterObject是返回参数对象,setParameters()是设置的预编译参数)第二:从parameterObject获取参数,然后使用typeHandler(在Configuration中注册)处理参数:
函数:很简单,就是汇编结果返回结果集
首先,结果集处理程序接口handlerResultSets()包装并返回结果集,而handleOutputParameters()处理存储过程输出参数
第二:Mybatis提供了默认的ResultSetHandler实现类default ResultSetHandler,重点是handlerResultSets()的实现,但是其实现过程比较复杂,这里就不介绍了(emmmmm...个人目前的能力仍然被理解,并且仍然需要努力)
第三,执行器中的doQuery()方法返回封装的结果集第四,实际上,结果是通过调用结果集处理程序的handleResultSets()方法返回的
SqlSession的运行主要依靠执行器调用(调度)StatementHandler、parameterHanlder和ResultSetHandler。执行器首先通过创建雄蕊tHandler来执行预编译和设置运行参数,整个过程需要以下步骤:
1)准备预编译的SQL
自适应模式生成的RoutingStatementHandler根据上下文选择生成三个对应的XXXStatementHandler
在生成的XXXStatementHandler内的instantiateStatement()方法中执行底层JDBC的prepareStatement()方法,以完成预编译
2)参数化设置参数
默认情况下,默认参数处理程序(实现参数处理程序接口)中的setParameter()方法完成参数配置,其中参数从ParameterObject中取出,并移交给typeHandler进行处理
3)doUpdate/doQuery执行SQL
返回的结果由默认的默认结果集处理程序(实现结果集处理程序接口)封装
1)SqlSession内部通用操作图
2)准备()方法的操作图:3)参数化()方法的操作图
1.《parameterize Mybatis的SqlSession运行原理》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《parameterize Mybatis的SqlSession运行原理》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/887858.html