惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
D
Docker
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
月光博客
月光博客
小众软件
小众软件
量子位
V
Visual Studio Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
罗磊的独立博客
博客园 - 叶小钗
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
博客园 - 司徒正美
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
C
Check Point Blog

Chenxu's Blog

写出一份好的代码 linux 的基本操作 启动我的服务 更舒适地写代码(含学生白嫖指南) RAG检索优化:从 68% 到 82.2% 学习深度学习 北邮计算机研究生选课指北 学习机器学习 上海篇 提出一个好问题 写代码的环境 选购一台合适的设备 计算机的第零课 序言 内蒙古篇 山东篇 一篇对transformers的疑惑 浅析GPUStack 浅谈后端项目分层 浙江篇 河南篇 一些三端协同的开发工具记录 浅谈编程语言中的 GC 在 Windows 上安装 Rust 美化博客 消息队列 现代交换原理2024年题目 回忆版 北邮计科本科课程指北 ClkLog埋点用户分析系统研究报告 大数据梧桐实验分享 大数据HBase实验分享
MyBatis
Chenxu · 2024-07-01 · via Chenxu's Blog

执行流程

  1. 读取配置文件 mybatis-config.xml, 获取数据库相关参数
  2. 构建会话工厂 SqlSessionFactory, 全局一个, 用于生产SqlSession
  3. 创建会话 SqlSession, 包含执行 sql 语句的所有方法, 每次操作一次会话, 有多个
  4. Executor 执行器, 执行数据库操作的接口, 也负责查询缓存的维护
  5. Executor 中有一个 MappedStatement 对象, 封装类型映射信息. 执行前将 java 的数据类型转换成数据库类型, 执行后将数据库类型转换成 java 类型
  6. 查询数据库

延迟加载

延迟加载: 查询时一个类的有些属性先不查询, 有需要的时候再查询加载

默认不使用延迟加载, 在 mapper 文件中设置fetchType="lazy"/在配置文件中配置lazyLoadingEnabled=true开启. 开启后当访问orderList属性时再执行这个属性的查询.

延迟加载原理:

一级和二级缓存

本地缓存, 基于 PerpetualCache, 本质上是一个 HashMap

  • 一级缓存: 作用域时 sqlSession 级别, 当 sqlSession 进行 flush/close 后清空, 默认打开一级缓存
  • 二级缓存: 作用域时 namespace 和 mapper 的作用域, 不依赖于 sqlSession, 使用cacheEnabled=true 并在 mapper 文件中添加<cache/>标签打开二级缓存

注意:

  • 当某一个作用域进行了数据修改操作时, 默认该作用域下所有缓存被清空
  • 二级缓存需要缓存的数据要实现Serializable接口
  • 会话提交或关闭后, 一级缓存中的数据才会转移到二级缓存中