- 博客(14)
- 收藏
- 关注
原创 响应式编程——Reactive-Stream学习
Reactive类似于,在各个系统通信的时候,运用了Kafka、mq进行消息传输,只不过是在本地进行自己的异步操作。对应正压模式,正压模式指的是生产者对消费者的压力。背压指的是消费者对生产者的压力。
2024-07-18 20:15:00
165
原创 事务的基本概念
在MySql默认引擎InnoDB中,默认是可重复读。其中SQL存储引擎的标准是4种。事物的特性主要是ACID,即原子、一致、隔离、持久。每一个事务即是一个最小个体,不可被分割。事务执行前后,数据处于一致的状态。则会对 id=2 的数据进行更新。并发的两个事务之间,互不干扰。已经提交的事务,不能被回滚。对于幻读和不可重复的的区别。
2024-06-19 21:00:00
452
原创 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
163
原创 mybatis映射体系——学习反射包装思路
其主要实现了迭代器,来进行判断是否有children,在运用方面进行递归,就可以循环遍历传进来的string。这种写法当然可以,但是显得相当臃肿,并且不能进行复用,我们先看看MyBatis给我们的方法。对于一个comments[0].user.name,会循环递归,直到获取最后一个值。对于我们正常的反射,我们可以进行以下操作,来进行getter方法。下来就是根据集合去get,或者通过反射去获取属性名,以下略过。看迭代器里的index是否不为空,不为空则代表是集合的下标。我们可以学习一下分词器的代码。
2024-05-29 20:00:00
343
原创 update中join代替case when进行条件更新
在进行更新数据的时候,需要更新多条数据,由于不想一条一条写update,因此想用case when来进行批量更新。(测试数据23W条,更新15条数据,需要0.8s)但是,表中有几十万条数据,更新会很慢。经过测试,同样15条用时0.22s左右。于是经过思考,考虑用。
2024-05-11 16:58:41
276
1
原创 MyBatis源码阅读-statementHandler
其中只有prepare是准备statement,但是如果想要获取预编译的statement怎么办呢?分别是返回一个普通的statement、预处理statement和存储过程statement。statementHandler有三个子类分别实现了这个功能。和Executor相似,他们的结构也分为1对1对3。
2024-04-19 15:09:59
214
原创 MyBatis源码阅读-Executor
mybatis分为主要分为4个部分我们先来看会话的部分-SqlSessionSqlSession采用门面模式,其中SqlSession只提供接口Api,实现功能全都交给Executor执行器执行。Executor的基本功能只提供 修改,查询和缓存维护的操作。其中修改和查询是JDBC原生只提供的接口。
2024-04-19 13:45:33
929
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人