1 Star 0 Fork 0

晓岚 / mybatis-study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

20180331作业

  1. TestMapper 作者为什么要设计这样的形式来做?为什么不是一个class而是一个interface?

我认为唯一的理由就是java proxy限制目标必须是一个接口或者继承自一个接口,如果TestMapper不是一个接口,代码会报错。

  1. org.apache.ibatis.executor.BaseExecutor#queryFromDatabase 322行这行代码的意义

应该是为了防止缓存击穿,即在同一时间大量的访问一个在cache里没有或刚好过期的数据(这个数据在数据库里存在)。

在BaseExecutor的下面方法里会判定缓存数据是否为EXECUTION_PLACEHOLDER,如果是则后面的查询等待,直到前面的查询结束。所以可以判定是为了防止缓存击穿。

    public boolean canLoad() {
      return localCache.getObject(key) != null && localCache.getObject(key) != EXECUTION_PLACEHOLDER;
    }
  1. MyBatis的plugin实现机制

使用代理模式实现的。 任何在运行时插入代码片段的方式(其实就是AOP理念)都逃不过代理模式。

再具体一点,对于mybatis,其在每次获取实例时通过configuration进行动态代理,比如:

executor = (Executor) interceptorChain.pluginAll(executor);

4.lazy loading 是怎么做到的?

使用代理模式

空文件

简介

研究和学习mybatis 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/jifengnan/mybatis-study.git
git@gitee.com:jifengnan/mybatis-study.git
jifengnan
mybatis-study
mybatis-study
master

搜索帮助