mybatis 源码 简读

open source project – mybatis (mybatis-3.5.5.jar)

前言

推荐几个链接,关于mybatis源码解读讲解的很详细的。

手把手带你阅读Mybatis源码(一)构造篇

手把手带你阅读Mybatis源码(二)执行篇

手把手带你阅读Mybatis源码(三)缓存篇

开始之源:

  • SqlSessionFactoryBuilder().builder(…) 返回 SqlSessionFactory;

    这一步就是在加载配置(xml,properties), 然后创建相应的mapper对象,configuration… [很多地方用到了反射来实现一种灵活性。]

在有 SqlSessionFactory 对象后, 用 openSession() 开启一个 session 与数据库连接。

  • 创建session 默认走的是 DefaultSqlSessionFactory 的 openSession(), 创建出一个 DefaultSqlSession :

    DefaultSqlSession 内包含的 executor 默认是走 SimpleExecutor, 如果开启 mapper 级别的二级缓存,则会在 SimpleExecutor 上再包一层,就是 CachingExecutor.

有了 session , 当然是开始做数据的 DDL 或 DDM 了:

  1. select 调用基本的都是 selectList方法
    • 查询时候先看是不是开启二级缓存,开启则先查二级缓存,没有则查一级缓存,也没有就查数据库,将返回的数据存入一二级缓存中。
  2. update/delete/insert 调用的都是update
    • 判断是否需要清理二级缓存,然后判断是否清理一级缓存,然后调用 update 方法。

    这里调用update是由于在外层已经把sql封装好了,在 SimpleStatementHandler 的时候, 只需要调用 jdbc 并且 传参判断是否需要生成 key 返回就好了。

一级缓存是指 sqlSession 级别的一个map, close sqlSession 了, 该缓存就清理了。 [不可设置的]

二级缓存是指 mapper[namespace] 级别的一个 map, 调用同一个 namespace 的查询,都用同一个cache。[可配置]

开启二级缓存要注意设置过期时间,并且要注意内存溢出


todo list:

  1. xml 配置文件如何解析的
  2. mapper调用后发生了什么
  3. ErrorContext 设计思想
  4. 返回的结果集是怎么封装的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值