![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mybatis 分析
qq_32045991
这个作者很懒,什么都没留下…
展开
-
Mybatis 的插件运行原理
Mybatis 插件运行原理Mybatis 中的四大对象 Executor、ParameterHandler、ResultSetHandler、StatementHandler 都是代理对象。如下代码,在创建时会调用 interceptorChain.pluginAll() 方法,遍历调用 plugin 方法判断是否返回目标对象本身,还是进行拦截返回代理对象。 如果拦截返回代理对象的话,之后调用时,会调用代理对象的拦截方法 intercept 进行拦截增强,从而实现调用插件。这与 RPC 客户端在调用原创 2020-08-09 16:07:58 · 432 阅读 · 0 评论 -
MyBatis 的一、二级缓存的区别及源码分析
一级、二级缓存区别存储结构, 一级缓存是存在内存 Map 中。二级缓存存储介质多样,可在内存、硬盘中,需要进行序列化和反序列化;范围, 一级缓存是 sqlSession 级别的缓存,二级缓存是跨 SqlSession 的;失效场景, 一级、二级缓存都是在执行插入、更新、删除时会失效,需要重新从数据库获取,避免脏读。另外一级缓存不能用于分布式场景,二级缓存需要使用 redis 来实现;一级缓存在开启一次数据库会话中,如果执行多次相同的查询 SQL,MyBatis 在第二次执行时会将从缓存中直接获原创 2020-08-09 16:05:57 · 225 阅读 · 0 评论 -
MyBatis 的 Executor 结构分析
Executor 结构如下图,Executor 的默认实现类为 BaseExecutor,实现 Executor 接口的大部分功能。BaseExecutor,Executor 接口的默认实现类,实现 Executor 接口的大部分功能;ClosedExecutor,已关闭的 Executor;CachingExecutor,支持二级缓存的 Executor 的实现类。先从缓存中查询结果,存在就返回。否则会给一级缓存执行器(BatchExecutor、ReuseExecutor、SimpleExe原创 2020-08-09 16:04:04 · 142 阅读 · 0 评论 -
动态 SQL 的概念、种类及分析
动态 SQL 概念顾名思义,SQL 是动态拼接成的,根据传入的变量值进行逻辑操作,并动态拼接,方便实现多条件下的数据库操作。 在业务逻辑复杂,即简单 SQL 无法完成时,需要拼接时就要使用动态 SQL。 以查询为例,会先判断 id 是否不为 0,如果不为 0,才会传入该占位符对应的 id 值。假设 id = 2333,即 “select * from User id = 2333”。如果为 0,则为 “select * from User”。<select id = "findByCondit原创 2020-08-09 16:02:10 · 3885 阅读 · 1 评论 -
动态代理实现 MyBatis 的延迟加载
MyBatis 的延迟加载MyBatis 是支持延迟加载,又叫懒加载。先查询主要信息,在按需去查询其他信息。即需要时加载查询,不需要时就不加载查询。使用延迟加载的目的是减轻数据库的压力,只有需要时才去查询。 举例,如下没使用延迟加载的话,就会两张表都查询,查出 orders 和 users 的信息,在拼接成一块。SELECT orders.*, users.username FROM orders, users WHERE orders.user_id = users.id-- 延迟加载相当于原创 2020-08-09 15:58:33 · 363 阅读 · 0 评论