栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis 源码 简读

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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. 返回的结果集是怎么封装的
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号