Mybatis源码分析
文章平均质量分 63
分享Mybatis源码知识
MAX_VALUE
走在通往架构的路上
展开
-
Mybatis核心-插件
Mybatis核心-插件原创 2021-04-26 13:40:11 · 127 阅读 · 0 评论 -
Mybatis核心-SqlSession、Executor
Mybatis核心-SqlSession原创 2021-04-26 13:39:31 · 482 阅读 · 0 评论 -
Mybatis核心-StatementHandler
Mybatis核心-StatementHandler原创 2021-04-26 13:37:48 · 196 阅读 · 0 评论 -
Mybatis核心-ResultSetHandler
Mybatis核心-ResultSetHandler原创 2021-04-26 13:36:57 · 290 阅读 · 0 评论 -
Mybatis核心-sql解析
一、组合模式将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。角色:抽象组件,树叶,树枝,调用者。二、SqlNodeSqlNode有多个实现类,每个实现类都对应一个动态sql节点。SqlNode是抽象组件,MixedSqlNode为树枝节点,TextSqlNode等实现类为树叶节点。WhereSqlNode和SetSqlNode是TrimSqlNode的特殊形式。<where>标签前缀为WHERE,自动删除最前面的a原创 2021-04-26 09:10:08 · 325 阅读 · 0 评论 -
Mabatis核心-初始化过程
读取mybatis-config.xml、mapper.xml文件,加载配置文件中指定的类,处理类上的注解,创建一些配置对象,最终完成框架各个模块的初始化。一、建造者模式(*Builder)mybatis在处理mybatis-config.xml、mapper.xml文件时,会在内存中创建配置对象Configuration,该过程使用了建造者模式。将一个复杂对象的创建过程和它的表示分离,从而使得同样的构建过程可以创建不同的表示。建造者模式将一个复杂的对象的创建过程分成一步步简单的步骤,用户只需要原创 2021-04-23 10:22:00 · 121 阅读 · 0 评论 -
Mybatis基础-缓存模块
缓存模块Mybatis的缓存分为一级缓存、二级缓存,本质上是一致的。都是使用Cache接口实现。去数据库查询之前,先查找缓存,缓存中没有再查询,有从缓存中返回值。装饰器模式四种角色:组件接口、装饰器抽象类、具体组件类、具体装饰器类其中装饰器抽象类、具体组件类都实现了组件接口。装饰器模式区别于代理模式的最大区别是:装饰器可以组合进行功能的叠加。Cache接口PerpetualCache:Cache实现类,底层使用HashMap做缓存。每一种缓存装饰器都对应着一种缓存清理策略。Blo原创 2021-04-16 16:01:49 · 128 阅读 · 0 评论 -
Mybatis基础-binding 模块
将Mapper接口中的方法和配置文件中SQL语句进行绑定。binding模块中涉及到的核心组件之间的关系如下图,其中MapperRegistry和MapperProxyFactory之间的关系是一对多。mybatis初始化时,MapperRegistry会将MapperProxyFactory注册进来,并通过MapperProxyFactory创建Mapper的代理对象MapperProxy,在真正执行mapper中方法时会创建MapperMethod对象并放入缓存,MapperMethod是执行sql语句原创 2021-04-16 15:06:58 · 180 阅读 · 0 评论 -
Mybatis基础-数据源和事务管理模块
一、工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延时到其子类。工厂方式模式包含了四种角色:工厂接口、工厂实现类、产品接口、产品实现类。二、数据源mybatis自定义了自己的数据源(连接池),当然也可以集成其他的数据源,如druid,HikariCP等。mybatis的数据源使用的也是工厂模板模式。UnpooledDataSource每次都会创建一个新的连接。PooledDataSource使用了连接池技术,从池中那数据库连接,使用完原创 2021-04-01 14:04:48 · 308 阅读 · 0 评论 -
Mybatis基础-资源加载
一、类加载器类加载机制:双亲委派机制,自下向上检查类是否已加载,自上向下加载类。类的加载时机:在使用的时候就会加载。常用的类加载器: BootStrapClassLoader:启动类加载器,加载路径为/jre/lib包下如:rt.jar ExtClassLoader:扩展类加载器,加载路径/jre/lib/ext包下jar AppClassLoader:应用程序类加载器,加载路径为classpath,如我们自定义的类和引入的第三方jar。 加载顺序:Boo...原创 2021-03-31 17:08:08 · 189 阅读 · 0 评论 -
Mybatis基础-日志模块
一、适配器模式将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。三种角色:目标接口target(调用者直接调用的接口)、适配器adapter(目标接口的实现类,封装了需要适配的类)、adaptee需要适配的类(真实的业务逻辑)。二、代理模式为其他对象提供一种代理以控制对这个对象的访问。代理模式:Subject是业务逻辑接口,RealSubject是业务逻辑接口的实现类,Proxy是实现了Subject的代理类,且封装了R原创 2021-03-30 17:49:16 · 172 阅读 · 0 评论 -
Mybatis基础-类型转换模块
Java程序<-->数据库,javaType<-->jdbcType,Mybatis使用类型处理器完成上述转换。一、TypeHandlerTypeHandler是类型转换器,BaseTypeHandler是抽象基类,用于实现javaType和jdbcType的转换,有众多的实现类。主要方法是设置参数和获取查询结果集,底层实现还是基于PrepareStatement、ResultSet。TypeHandler可以通过mybatis-config配置文件typeHandler节点原创 2021-03-30 14:05:25 · 330 阅读 · 0 评论 -
Mybatis基础-反射模块
一、Reflector和ReflectorFactory动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。反射的基本术语:Class、Constructor、Field、MethodReflector:存储类的基本信息。ReflectorFactory: 对Reflector的创建和缓存。二、TypeParameterResolverType是所有类型的公共接口,Cl...原创 2020-03-23 09:36:45 · 450 阅读 · 0 评论 -
Mybatis基础-解析器模块
解析器模块的功能主要是将mybatis的配置文件和映射文件封装到Configuration对象中去,供后续执行核心处理逻辑使用。一、XML的解析方式:DOM(Document Object Model):基于树形结构的解析方式,会将整个xml文档读入内存并解析成DOM树。再对树结构进行解析,优点是可以方便的操作树结构的每一个节点,缺点是如果xml过大,消耗内存严重。SAX(Simple...原创 2020-03-20 10:34:11 · 248 阅读 · 0 评论 -
mybatis开篇
最近工作不太忙,着手研究了下mybatis源码(目前正在学习中。。。)。看了部分,受益匪浅,向大家推荐<<Mybatis技术内幕>>,该书源码是基于mybatis3.4。贴上mybatis的架构图,书籍也是按照这种架构逐步分析的。...原创 2020-03-18 09:41:31 · 292 阅读 · 0 评论