Mybatis 源码学习
凉茶方便面
学习
展开
-
Mybatis 源码学习(13)-DataSource
历史文章:Mybatis 源码学习(12)-资源加载数据源模块位于 org.apache.ibatis.datasource 包内,其中的核心类包括:DataSourceFactory 和 DataSource。数据源模块是一系列代码,它符合抽象工厂的构建方式,首先它提供了 DataSourceFactory 接口和 DataSource 接口,分别代表抽象工厂的工厂接口和工厂产品实现,并分...原创 2019-12-09 23:39:49 · 295 阅读 · 0 评论 -
Mybatis 源码学习(12)-资源加载
历史文章:Mybatis 源码学习(11)-日志模块Mybatis 中的资源加载依赖于 JVM 的类加载机制,在 JVM 中的类加载机制使用的双亲委派模式。默认情况下,JVM 中存在三种加载器:Bootstrap ClassLoader、Extension ClassLoader、System ClassLoader,我们也可以拓展实现用户自定义的类加载器 UserDefine ClassL...原创 2019-12-05 22:41:28 · 238 阅读 · 0 评论 -
Mybatis 源码学习(11)-日志模块
历史文章:Mybatis 源码学习(10)-类型转换(TypeAliasRegistry)Java 开发中常用的日志工具类包括Log4J、Log4J2、Apache Common Log、java.util.logging、Slf4j,这些工具的接口并不统一,为了提供统一的接口,Mybatis 对这些日志接口做了统一适配。Mybatis 的日志模块使用了适配器模式,其内部提供了统一的适配器...原创 2019-12-05 22:38:57 · 270 阅读 · 0 评论 -
Mybatis 源码学习(10)-类型转换(TypeAliasRegistry)
历史文章:Mybatis 源码学习(8)-类型转换(TypeHandler)TypeAliasRegistry 的逻辑比较简单,它负责为某个数据类型创建别名,之后在使用时可以使用别名引用该类。在 Mybatis 的 mapper.xml 文件中,一般会有返回值的类型,对于整型数值,既可以用 int 也可以用 integer,还可以用类的全限定名,这里就是用到了 Integer 的别名。Ty...原创 2019-11-30 16:38:01 · 195 阅读 · 0 评论 -
Mybatis 源码学习(9)-类型转换(TypeHandlerRegistry)
历史文章:Mybatis 源码学习(8)-类型转换(TypeHandler)定义 TypeHandler 后,Mybatis 还需要对这些 TypeHandler 进行管理,Mybatis 是通过 TypeHandlerRegistry 来实现 TypeHandler 的管理的。TypeHandlerRegistry 的初始化是在 Configuration 中,Configuration ...原创 2019-11-24 22:31:03 · 576 阅读 · 0 评论 -
Mybatis 源码学习(8)-类型转换(TypeHandler)
历史文章:Mybatis 源码学习(7)-反射工具(ObjectWrapper & MetaObject)JDBC 规范中定义的数据类型和 Java语言中的数据类型并非完全对应,因此需要在操作 Statement 时需要将 Java 类型转为 JDBC 类型,而处理 Result时,需要将JDBC 类型,转为 Java 类型。Mybatis 使用 TypeHandler 处理这种类型...原创 2019-11-24 22:30:32 · 180 阅读 · 0 评论 -
Mybatis 源码学习(7)-反射工具(ObjectWrapper & MetaObject)
历史文章:Mybatis 源码学习(6)-反射工具(MetaClass)MetaClass 可以通过反射来解析类级别类型信息,而 ObjectWrapper 是对对象的包装,可以通过字符串操作和查询对象的属性。ObjectWrapper 类继承关系如下,它提供了 BaseWrapper、BeanWrapper、MapWrapper 和 CollectionWrapper。BaseWrappe...原创 2019-11-20 22:50:44 · 574 阅读 · 0 评论 -
Mybatis 源码学习(6)-反射工具(MetaClass)
历史文章:Mybatis 源码学习(5)-反射工具(Property 工具)MetaClass 可以被用来解析任意 Class 对象的方法和字段,它对外提供了:findProperty、hasSetter、hasGetter、getSetterType、getGetterType 等方法判断属性以及对应的 get、set 方法是否存在。在 MetaClass 内部,使用了 Reflector...原创 2019-11-17 22:58:58 · 283 阅读 · 0 评论 -
Mybatis 源码学习(5)-反射工具(Property 工具)
历史文章:Mybatis 源码学习(4)-反射工具(ObjectFactory)Property 工具集包含 PropertyTokenizer、PropertyNamer、PropertyCopier 三个工具类,其中 PropertyTokenizer 用于符号解析,PropertyNamer 用于解析和判断属性名称,PropertyCopier 用于对象属性复制。PropertyTo...原创 2019-11-17 22:57:19 · 231 阅读 · 0 评论 -
Mybatis 源码学习(4)-反射工具(ObjectFactory)
历史文章:Mybatis 源码学习(3)-反射工具(TypeParameterResolver)ObjectFactory 相对简单,它是一个接口,定义了如何创建 Mybatis 中的对象,在 Mybatis 的配置文件中,可以直接自定义 ObjectFactory 的接口实现类。Mybatis 默认提供了 ObjectFactory 的实现类:DefaultObjectFactory。O...原创 2019-11-11 22:46:31 · 140 阅读 · 0 评论 -
Mybatis 源码学习(3)-反射工具(TypeParameterResolver)
TypeParameterResolver 是用来解析类中字段、方法参数、方法返回值的工具类,它通过自身的静态方法,利用反射处理对应的类型,并转化为实际的 Type 类型。而 Type 类型是 java 程序中所有数据类型的基类,它包含原始类型,参数化类型,类型变量,数组类型和通配符泛型几种类型。TypeType 是所有类型的父接口,它的继承关系如下:Class:原始类型,Java 中的每...原创 2019-11-11 00:19:18 · 424 阅读 · 1 评论 -
Mybatis 源码学习(2)-反射工具(Reflector)
由于 JDK 提供的反射机制过于复杂,因此 Mybatis 对常用的反射机制做了封装,以简化反射 API,这部分封装代码在 org.apache.ibatis.reflection 包中。ReflectorReflector 主要用于解析一个 Class 对象,将其类型、构造函数、set方法、get 方法做解析,方便随时使用。这里的 get/set 方法解析,只根据方法进行解析,而不关系其中...原创 2019-11-05 23:17:41 · 320 阅读 · 0 评论 -
Mybatis 源码学习(1)-解析器模块
XPathXPath 是通过表达式在 XML 文件中选择节点的表达式语言,通过 XPath 可以将 XML 中的节点,通过特定的规则将 DOM 对象,转化为 Boolean、Double、String 等 Java 对象。简单的举例来说:给定 xml 文件内容为<foo> <bar/> <bar/> <bar/></foo...原创 2019-11-01 23:45:25 · 215 阅读 · 0 评论