加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

关于mybatis里面的Executor--转载

发布时间:2020-12-11 23:56:11 所属栏目:MySql教程 来源:网络整理
导读:原文地址:http://blog.csdn.net/w_intercool/article/details/7893344 使用mybatis查寻数据,跟踪其执行流程 最开始执行的语句 div class="dp-highlighter bg_java" div class="bar" div class="tools" [java] ?a class="ViewSource" title="view plain" hr

原文地址:http://blog.csdn.net/w_intercool/article/details/7893344

使用mybatis查寻数据,跟踪其执行流程

最开始执行的语句

<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
[java]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?

这里需要找到sqlsession是从哪里来的

getSqlSession是SqlSessionDaoSupport类里面的方法,该类通过spring的自动注入可以把sqlSessionTemplate注入进来,当然这里的sqlSessionTemplate是需要spring配置的

<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
[java]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?
  1. ??

<div class="dp-highlighter bg_html">
<div class="bar">
<div class="tools">
[html]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?
    ??
  1. ??????????
  2. ??
  3. ??????

@Autowired(required = false)是通过类型匹配来注入的,如果没有找到相应对,就不用注入

所以selectList方法为SqlSessionTemlate里面的,再看SqlSessionTemplage,里面的都是通过sqlSessionProxy来执行selectList方法的,也就是通过代理方式来的

<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
[java]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?
  1. ????PersistenceExceptionTranslator?exceptionTranslator)?{??
  2. ??notNull(sqlSessionFactory,?
  3. ??
  4. ??
  5. ??
  6. ??????
  7. }??

这里用到了java的动态代理,详细可以见java api,有详细的说明

SqlSessionInterceptor实现了InvocationHandler,在invoke方法里面的开始有这样代码,那里是真正的sqlsession

<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
[java]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?
  1. ?????????SqlSessionTemplate.
  2. ?????????SqlSessionTemplate.

跟踪geteSqlSession可以找到他的创建来源,见

<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
[java]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?

继续跟踪可以找到DefaultSqlSessionFactory里面的该方法

<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
[java]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?
  1. ??Transaction?tx?=?
  2. ????
  3. ????tx?=?transactionFactory.newTransaction(environment.getDataSource(),?level,?autoCommit);??
  4. ????
  5. ????closeTransaction(tx);?
  6. ??}?
  7. ??}??

通过

[java]? ?

你就知道executor是怎么回来的了

mybatis默认使用了cache,在创建exector时,外面就包了一层CacheExecutor,详细见

<div class="dp-highlighter bg_java">
<div class="bar">
<div class="tools">
[java]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;copy<a class="PrintSource" title="print" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;print<a class="About" title="?" href="http://blog.csdn.net/w_intercool/article/details/7893344"&gt;?

?
  1. ??executorType?=?executorType?==?
  2. ??Executor?executor;??
  3. ????executor?=?
  4. ????executor?=?
  5. ????executor?=?
  6. ??
  7. ??}??
  8. ??

CachingExecutor可以使mybatis先从缓存中提取数据,数据缓存中没有数据时才从数据库里面提取数据。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读