mybatis
文章平均质量分 83
mybatis
@THINK
java 性能 磁盘IO交互 开销
展开
-
MyBatis(9)插件体系
插件体系概述插件机制是为了对MyBatis现有体系进行扩展 而提供的入口。底层通过动态代理实现。可供代理拦截的接口有四个: Executor:执行器 StatementHandler:JDBC处理器 ParameterHandler:参数处理器 ResultSetHandler:结果集处理器 这四个接口已经涵盖从发起接口调用到SQl声明、参数处理、结果集处理的全部流程。接口中任何一个方法都可以进行拦截改变方法原有属性和行为。不过这是一个非常危险的行为,稍不注意原创 2021-06-12 01:43:11 · 253 阅读 · 2 评论 -
MyBatis(8)Configuration配置体系
Configuration配置体系Configuration概述Configuration 是整个MyBatis的配置体系集中管理中心,前面所学Executor、StatementHandler、Cache、MappedStatement...等绝大部分组件都是由它直接或间接的创建和管理。此外影响这些组件行为的属性配置也是由它进行保存和维护。如cacheEnabled、lazyLoadingEnabled ... 等。所以说它MyBatis的大管家很形象。核心作用总结总结一下Configur原创 2021-06-12 00:53:14 · 320 阅读 · 0 评论 -
MyBatis(7)动态SQL全流程解析
动态SQL全流程解析动态SQL是MyBatis 强大功能之一,他免除了在JAVA代码中拼装SQL字符串麻烦,同时保留了我们对SQL的自主控制,更方便进行SQL性能优化改造。动态SQL中我们使用XML 脚本元素控制SQL的拼装,这都是日常开发中要用到元素,我们一起来回顾一下(如果你对动态使用已经非常熟悉了可直接跳过本节)。 if choose (when, otherwise) trim (where, set) foreach if<if tes原创 2021-06-11 18:35:52 · 1444 阅读 · 0 评论 -
MyBatis(6)映射体系二
懒加载&嵌套映射前言:基于动态代理实现懒加载,在使用过程中,如果会话关闭、跨线程、序列化等情况下,是否能够继续加载?懒加载懒加载是为改善,解析对象属性时大量的嵌套子查询的并发问题。设置懒加载后,只有在使用指定属性时才会加载,从而分散SQL请求。<resultMap id="blogMap" type="blog" autoMapping="true"> <id column="id" property="id"></id>...原创 2021-06-11 18:00:39 · 204 阅读 · 0 评论 -
MyBatis(5)映射体系一
结果集映射体系一前言本章你将学会MetaObject的使用与原理,以及嵌套子查询原理,包括子查询当中的循环依赖映射工具MetaObject所谓映射是指结果集中的列填充至JAVA Bean属性。这就必须用到反射,而Bean的属性 多种多样的有普通属性、对象、集合、Map都有可能。为了更加方便的操作Bean的属性,MyBatis提供了MeataObject 工具类,其简化了对象属性的操作。其具体功能如下: 查找属性:勿略大小写,支持驼峰、支持子属性 如:“blog.comment.us原创 2021-06-11 13:55:13 · 287 阅读 · 1 评论 -
MyBatis(4)Jdbc处理器StatementHandler解析
MyBatis Jdbc处理器StatementHandler解析StatementHandler概要MyBatis一个基于JDBC的Dao框架,但前面我们所学的会话、执行器半点没有提到jdbc,原因是MyBatis把所有跟JDBC相关的操作全部都放到了StatementHandler中。一个SQL请求会经过会话,然后是执行器,最由StatementHandler执行jdbc最终到达数据库。其关系如下图:这里要注意这三者之间比例是1:1:n。也就是说多个SQL操作对应一个会话,和唯一的执原创 2021-06-11 02:15:35 · 300 阅读 · 1 评论 -
MyBatis(3)二级缓存源码解析
MyBatis二级缓存源码解析文本主要目的为掌握二级缓存的使用场景、熟悉其执行结构、以及执行过程源码二级缓存概述二级缓存也称作是应用级缓存,与一级缓存不同的,是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改较少的数据。在流程上是先访问二级缓存,在访问一级缓存。二缓存需求二级缓存是一个完整的缓存解决方案,那应该包含哪些功能呢?这里我们分为核心功能和非核心功能两类:存储【核心功能】即缓存数据库存储在哪里?常用的方案如下: 内存:原创 2021-06-11 02:09:17 · 256 阅读 · 0 评论 -
MyBatis(2)一级缓存源码解析
MyBatis一级缓存源码解析本文将探讨一级缓存命中场景以,一级缓存源码实现MyBatis缓存概述myBatis中存在两个缓存,一级缓存和二级缓存。 一级缓存:也叫做会话级缓存,生命周期仅存在于当前会话,不可以直接关关闭。但可以通过flushCache和localCacheScope对其做相应控制。 二级缓存:也叫应用级性缓存,缓存对象存在于整个应用周期,而且可以跨线程使用。 关于二级缓存将在后续章节,详细说明。文本先聚焦一级缓存。首先来看如何才能命中一级缓存。原创 2021-06-11 02:06:37 · 334 阅读 · 0 评论 -
MyBatis(1)深入理解Executor执行器
MyBatis深入理解Executor执行器本文的目的是理解MyBatis整体执行流程,并且理解Executor在整个流程当中的意义。源码阅读网内部资料,转载前请联系作者。JDBC执行过程回顾MyBatis是一个Dao层映射框架,底层还是用的JDBC来访问数据库,在学习MyBatis之前有必要先回顾一下JDBC的执行过程:具体代码我就不贴了,不懂的自行百度。这里重点说一下预编译器 Statement,通过该组件来发送对应的SQL与参数。它有三种类型:分别是简单Statemen原创 2021-06-11 01:53:10 · 799 阅读 · 2 评论 -
Mybatis原理之图解
Mybatis结构与原理JDBC执行过程Executor执行器体系缓存体系一级缓存二级缓存JDBC处理器StatementHandler结构StatementHandler流程参数处理结果集处理MetaObject流程ResultMap结果集映射动态SQL脚本组成结构脚本解析流程目录Mybatis结构与原理JDBC执行过程Executor执行器体系缓存体系一级缓存二级缓存JDBC处理器StatementHandl原创 2021-06-11 01:20:24 · 315 阅读 · 0 评论