
MyBatis
文章平均质量分 53
我的头像就是你
这个作者很懒,什么都没留下…
展开
-
MyBatis源码阅读——从子查询学习延迟加载
在查询到第一次sql的时候(A),如果缓存里没有值,则将A插入到一级缓存,值为占位符。当再次到A的时候,A的缓存为占位符,则将A扔到延迟加载队列。在执行BaseExecutor的时候,会对queryStack进行++,当queryStack为0的时候,才会进行对主查询的处理。直接说结论:没有出现循环依赖。MyBatis是怎么解决的呢,我们先来看一下子查询,MyBatis的查询过程。在所有的子查询处理完毕后,queryStack为0,再开始处理延迟加载队列里的查询,将值赋给A。具体流程,例如A->B->A。原创 2024-05-29 22:51:21 · 164 阅读 · 0 评论 -
mybatis映射体系——学习反射包装思路
其主要实现了迭代器,来进行判断是否有children,在运用方面进行递归,就可以循环遍历传进来的string。这种写法当然可以,但是显得相当臃肿,并且不能进行复用,我们先看看MyBatis给我们的方法。对于一个comments[0].user.name,会循环递归,直到获取最后一个值。对于我们正常的反射,我们可以进行以下操作,来进行getter方法。下来就是根据集合去get,或者通过反射去获取属性名,以下略过。看迭代器里的index是否不为空,不为空则代表是集合的下标。我们可以学习一下分词器的代码。原创 2024-05-29 20:00:00 · 343 阅读 · 0 评论 -
MyBatis源码阅读-statementHandler
其中只有prepare是准备statement,但是如果想要获取预编译的statement怎么办呢?分别是返回一个普通的statement、预处理statement和存储过程statement。statementHandler有三个子类分别实现了这个功能。和Executor相似,他们的结构也分为1对1对3。原创 2024-04-19 15:09:59 · 214 阅读 · 0 评论 -
MyBatis源码阅读-Executor
mybatis分为主要分为4个部分我们先来看会话的部分-SqlSessionSqlSession采用门面模式,其中SqlSession只提供接口Api,实现功能全都交给Executor执行器执行。Executor的基本功能只提供 修改,查询和缓存维护的操作。其中修改和查询是JDBC原生只提供的接口。原创 2024-04-19 13:45:33 · 934 阅读 · 0 评论