• 2018/4/7 Mybatis源码结构概览


    在观看Mybatis源码的过程中,有一点疑惑,就是Mybatis的缓存设计明显有问题,首先,Mybatis缓存分为两级,先说一级,生命周期为一个sqlsession,只有在查询相同方法时才会命中缓存,那么请问是什么情况下我们才需要连续查询两次相同方法呢?再说缓存清除策略,当发生update或者delete时会清除所有缓存,what???很明显的惊群现象好吗?再说二级缓存,因为是Mapper的Scope,所以在关联嵌套查询时脏数据的问题是硬伤,因为你无法预知你所关联的那个实体类的Mapper是否发生了Update或delete.

    我真是搞不懂了,Debug时发现Mybatis缓存的Key很明显是多维度的Key,也就是包名+类名+方法名,但为什么不再弄个类似Hibernate一级缓存那样的oid唯一标识?还是说只是为了区分而区分。好了,槽就吐到这了,好好看下结构图吧。

    首先下面就是Mybatis缓存的一些类和接口

    这是缓存抽象出的接口

    缓存的事务

    缓存的默认实现

    当然也有其它一些针对特定场景的实现

    Mybatis最核心的执行接口和实现,以及一些结果集映射,类型映射,主键生成之类,还有从这里我们可以看到,Mybatis是支持对数据库进行批量操作的

    抽象的执行接口

    与jdbc交互生成sql语句之类

    Mybatis的事务接口和实现,可以从相关类名看出是支持编程式和集成式(managed一般就是用来做集成管理,也就是使用配置文件统一配置),其实跟Spring整合后,Spring的事务管理会覆盖掉它,很霸气

  • 相关阅读:
    php gettext 注释
    autobench 测试笔记
    Android 常用布局视图
    路由器插入广告实现
    kafka 搭建与使用
    复制虚拟机之后,互相ping不通
    docker运行镜像提醒WARNING: IPv4 forwarding is disabled. Networking will not work.
    docker容器简单常用操作
    mongo通过URL连接IDEA
    gradle基础应用
  • 原文地址:https://www.cnblogs.com/yangfeiORfeiyang/p/8734074.html
Copyright © 2020-2023  润新知