对Mybatis源码的认识

从问题引发对ORM(对象关系映射)框架-Mybatis源码的认识>>>Mybatis的一级缓存默认是开启的吗?默认采用的执行器是?

回答这类似的问题,众说得来终觉浅,绝知此事要Debug,上来就是Debug<可条件断点>源码,可按下面三点去一探究竟:

1、数据源>>> xml<environment>java Environment::

>org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream)

      >org.apache.ibatis.builder.xml.XMLConfigBuilder

            >org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration

                 >org.apache.ibatis.builder.xml.XMLConfigBuilder.environmentsElement

                       >org.apache.ibatis.builder.xml.XMLConfigBuilder.dataSourceElement

                             >org.apache.ibatis.datasource.DataSourceFactory.getDataSource

2、sql解析>>>sql>MappedStatement::

>org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream)

      >org.apache.ibatis.builder.xml.XMLMapperBuilder

            >org.apache.ibatis.builder.xml.XMLMapperBuilder.parse

                 >org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(List<XNode>)

                       >org.apache.ibatis.builder.xml.XMLStatementBuilder

                             >org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode

3、操作库>>> SimpleExecutor 执行器::

>org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession()

      >org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession.openSessionFromDataSource

            >org.apache.ibatis.session.Configuration.newExecutor()

                 >org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne()

                       >org.apache.ibatis.session.Configuration.queryFromDataBase

                             >org.apache.ibatis.executor.SimpleExecutor.doQuery

Summary

(其中加载mapper的方式可分:package、resource、url、class)

从源码可知Mybatis的一级缓存(SqlSession)是默认开启的,二级缓存(mapper级别,默认不开启),默认采用的执行器是SimpleExecutor。

其中,

SimpleExecutor:获取声明处理类StatementHandler、获取声明类prepareStatement()、处理声明,并执行sql处理。

ReuseExecutor:重用声明(sql一样,但仅仅是同一个session内的有效)。

BatchExecutor:重点在flushStatements(批量更新提交),若不开启批量模式,则是没有使用批量更新的>sessionFactory.openSession(ExecutorType.BATCH, false)。

CachingExecutor:缓存执行器(全局缓存),configuration里面的cacheEnabled参数决定,默认为true,也就是默认是开启全局缓存,其缓存机制主要设计模式<装饰模式、责任链模式>,其CachingExecutor类<增强了其他的执行器,加缓存可借鉴☞>,不同的是其先执行缓存处理>,与此同时,只有在每个mapper上须配置是否使用缓存后才会生效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值