BeatShadow's blog 
  • Home
  • Archives
  • Categories
  • Tags
  • About
  •     
DataSource

DataSource

DataSource1. 工厂方法模式2. DataSourceFactory在数据源模块中,DataSourceFactory接口扮演工厂接口的角色。UnpooledDataSourceFactory和PooledDataSourceFactory则扮演着具体工厂类的角色。 我们从DataSourceFactory接口开始分析,其定义如下: /** * 设置DataSource相关属性, * 一切紧跟在初始化完成之后,证明: * {@link org.apache.ibatis.builder.xml.XMLConfigBuilder#dataSourceElement(XNode)} * @param props */ void setProperties(Properties props); /** * 获取DataSource对象 * @return */ DataSource getDataSource(); 2.1. UnpooledDataSourceFactory在UnpooledDataSourceF
 2019-11-29   Mybatis源码分析  基础支持层    Mybatis源码分析  工厂方法模式 
资源加载

资源加载

资源加载
 2019-11-29   Mybatis源码分析  基础支持层    Mybatis源码分析 
日志模块

日志模块

日志模块
 2019-11-29   Mybatis源码分析  基础支持层    Mybatis源码分析 
Mybatis初始化(二)——3.解析<sql>节点

Mybatis初始化(二)——3.解析<sql>节点

解析<sql>节点在映射配置文件中,可以使用<sql>节点定义可重用的~语句片段。当需要重用<sql>节点中定义的SQL语句片段时,只需要使用include节点引用相应的片段即可,这样,在编写SQL语句以及维护这些SQL语句时,都会比较方便。<include>节点的解析在后面详细介绍。 XMLMapperBuilder.sqlElement()方法负责解析映射配置文件中定义的的全部<sql>节点,具体代码如下所示: private void sqlElement(List<XNode> list, String requiredDatabaseId) { //遍历所有的<sql>节点 for (XNode context : list) { //解析<sql>节点 //获取<sql>节点的databaseId属性的值 String databaseId = context.getStringAttribute("d
 2019-11-29   Mybatis源码分析  核心处理层    Mybatis源码分析 
Mybatis初始化(二)——2.解析<resultMap>节点

Mybatis初始化(二)——2.解析<resultMap>节点

解析<resultMap>节点1. 简介select语句查询得到的结果集是一张二维表,水平方向上看是一个个字段,垂直方向上看是一条条数据。而Java是面向对象的程序设计语言,对象是根据类定义创建的,类之间的引用关系是可以认为是嵌套结构的。在JDBC编程中,为了将结果集中的数据映射成对象,我们需要自己写代码从结果集中获取数据,然后封装成对应的对象并设置对象之间的关系,而这些都是大量的重复性的代码。为了减少这些重复的代码,Mybatis使用<resultMap>节点定义了结果集与结果对象(JavaBean对象)之间的映射规则,<resultMap>节点可以满足绝大部分的映射需求,从未减少开发人员的重复性劳动,提高开发效率。 在开始介绍<resultMap>节点的解析过程之前,先来介绍该过程中使用的数据结构。每个ResultMapping对象记录了结果集中的一列与JavaBean中一个属性之间的映射关系。在后面的分析过程中我们可以看到,<resultMap>节点下除了<discriminator>子节点的其他子节点,都被
 2019-11-28   Mybatis源码分析  核心处理层    Mybatis源码分析 
类型转换

类型转换

类型转换1. 概述​ JDBC数据类型与Java语言中的数据类型并不是完全对应的,所以在PreparedStatement为SQL语句绑定参数是,需要从Java类型转换成JDBC类型,而从ResultSet中获取数据时,则需要从JDBC类型转换成Java类型。Mybatis使用类型转换器完成上述两种转换。据图如下图所示: ​ 在Mybatis中使用JdbcType这种枚举类型代表JDBC中的数据类型,该枚举类型中定义了TYPE_CODE字段,记录了JDBC类中在java.sql.Types中相应的常量编码,并通过一个静态集合codeLookUp(HashMap<Integer,JdbcType>类型)维护了常量编码与JdbcType之间的对应关系。 2. TypeHandler​ Mybatis中所有的类型转换器都继承了TypeHandler接口,在TypeHandler接口中定义了如下四种方法,这四种方法分为两类: setParameter()方法 负责将数据由Java类型转换成JdbcType类型 getResultS
 2019-11-27   Mybatis源码分析  基础支持层    Mybatis源码分析 
Mybatis初始化(二)——1.解析<cache>和<cache-ref>节点

Mybatis初始化(二)——1.解析<cache>和<cache-ref>节点

解析<cache>和<cache-ref>节点
 2019-11-27   Mybatis源码分析  核心处理层    Mybatis源码分析 
Mybatis初始化(一)

Mybatis初始化(一)

Mybatis初始化(一) 因为篇幅的原因,此部分只分析mybatis-config.xml配置文件的解析。 类似于Spring,Mybatis等灵活性和扩展性都很高的开源框架都提供了很多配置项,开发人员需要在使用时提供相应的配置信息,实现相应的需求。Mybatis中的配置文件主要有两个,分别是mybatis-config.xml配置文件和映射配置文件。 现在主流的配置方式除了使用XML配置文件,还会配合注解进行配置。在Mybatis初始化过程中,除了会读取mybatis-config.xml配置文件以及映射配置文件,还会加载配置文件指定的类,处理类中的注解,创建一些配置对象,最终完成框架中各个模块的初始化。另外,也可以使用Java API方式对Mybatis进行配置,这种硬编码的配置方式主要用在配置量比较少且配置信息不常变化的场景下。 1. 建造者模式2. BaseBuidlerBaseBuilder的子类如下所示: 因为VelocitySqlSourceBuilder只是一个测试用例,所以我暂且不把它划为BaseBuilder,包括其静态内部类 ParameterMappin
 2019-11-26   Mybatis源码分析  核心处理层    Mybatis源码分析 
反射工具箱

反射工具箱

反射工具箱1. 简介​ Mybatis在进行参数处理、结果集映射等操作时,会涉及大量的反射操作。Java中的反射虽然功能强大,但是代码编写起来比较复杂容易出错,为了简化反射操作的相关代码,Mybatis提供了专门的反射模块,该模块位于org.apache.ibatis.reflection包中,它对常见的反射操作做了封装,提供了更加简洁方便的反射API。 2. Reflector&ReflectorFactory2.1. Reflector​ Reflector是Mybatis中反射模块的基础,每个Reflector对象都对应一个类,在Reflector中缓存了反射操作需要使用的类的元信息。Reflector中各个字段的含义如下所示: /** * 对应类的类型 */ private final Class<?> type; /** * 可读属性的名称集合,可读属性就是存在相应的getter方法的属性,初始值为空数组 */ private final String[] readablePropert
 2019-11-26   Mybatis源码分析  基础支持层    Mybatis源码分析 
解析器模块

解析器模块

解析器模块1. 简介​ 解析器模块,对应的包是parsing,如下图所示: 解析器模块,主要提供了两个功能: 对XPath进行封装,为Mybatis初始化时解析mybatis-config.xml配置文件以及mapper映射配置文件提供支持。 为处理动态SQL语句中的占位符提供支持。 2. XML解析方式在mybatis中涉及到多个XML配置文件,因此我们首先要介绍XML解析的相关内容。XML解析的常见的方式有三种: DOM(document object model)解析方式 SAX(simple api for xml)解析方式 Java6版本开始,JDK致辞的StAX(streaming api for xml)解析方式。 DOM是基于树形结构的XML解析方式,它将整个XML文档读入内存并构建成一个DOM树,基于这棵树形结构对各个节点(node)进行操作。XML文档中的每一个成分都是一个节点:整个文档是一个文档节点,每个XML标签对应一个元素节点,包含在XML标签中的文本是文本节点,每一个XML属性是一个属性节点,注释属于注释节点。 <?xml versi
 2019-11-25   Mybatis源码分析  基础支持层    Mybatis源码分析 
123

搜索

Contact me at :
© Blog 2018 powered by Hexo, made by gnehcgnaw.
 总访问量 次   总访客数 人