当前位置: 首页 > news >正文

外网门户网站建设方案高清网站推广免费下载

外网门户网站建设方案,高清网站推广免费下载,微商软件激活码批发商城,中国外贸b2c网站文章目录前言参考目录学习笔记1、章节目录概览2、14.3:SqlSourceBuilder 类与 StaticSqlSource 类3、14.4.2:ResultMapResolver 类3.1、测试代码说明3.2、结果集 userMap 解析流程3.3、结果集 getGirl 解析流程3.4、鉴别器 discriminator 解析流程4、14.…

文章目录

    • 前言
    • 参考目录
    • 学习笔记
      • 1、章节目录概览
      • 2、`14.3`:`SqlSourceBuilder` 类与 `StaticSqlSource` 类
      • 3、`14.4.2`:`ResultMapResolver` 类
      • 3.1、测试代码说明
      • 3.2、结果集 `userMap` 解析流程
      • 3.3、结果集 `getGirl` 解析流程
      • 3.4、鉴别器 `discriminator` 解析流程
      • 4、`14.6`:XML 文件解析
      • 5、`14.6.2`:配置文件解析
      • 6、`14.6.3`:数据库操作语句解析
      • 7、`14.6.4`:Statement 解析
      • 8、`14.7`:注解映射的解析

前言

本文内容对应的是书本第 14 章的内容,主要是关于 builder 包的学习,本章节的内容比较多,每一小节都有相应的例子进行说明,也附带了源码的注释说明,因此本文只是选择了本章节一部分的内容来进行 Debug 分析说明。

参考目录

  • 《通用源码阅读指导书:MyBatis源码详解》
    本文主要内容来自 第14章 builder包
  • 《通用源码阅读指导书——MyBatis源码详解》配套示例
    书中涉及的 Demo 示例,本文示例在 Demo13 的基础上进行了简单改造。

与上篇一样,需要说明的是,书中使用的框架版本和本文(本专栏)使用的版本不一样。

名称书中版本专栏版本
MyBatis3.5.23.5.11+
Spring Boot2.X3.X
JDK817+

随着版本的升级迭代,会有一些内容不尽相同,需要结合着进行学习。

学习笔记

1、章节目录概览

由于我在微信读书看书的时候,电子版对于书本章节里面的小节并没有进行详细的划分,有些小节的内容并没有在目录体现出来,对于想要快速查找资料不太方便,所以下面简单的做了整理,方便后面复习时进行对照查找。

(加粗的部分是下面会进行分析的内容)

  • 14.1 建造者模式
  • 14.2 建造者基类与工具类
  • 14.3 SqlSourceBuilder类与StaticSqlSource类
  • 14.4 CacheRefResolver类和ResultMapResolver类
    • 14.4.1 CacheRefResolver类
    • 14.4.2 ResultMapResolver类
  • 14.5 ParameterExpression类
  • 14.6 XML文件解析
    • 14.6.1 XML文件的声明解析
    • 14.6.2 配置文件解析
    • 14.6.3 数据库操作语句解析
    • 14.6.4 Statement解析
    • 14.6.5 引用解析
  • 14.7 注解映射的解析
    • 14.7.1 注解映射的使用
    • 14.7.2 注解映射解析的触发
    • 14.7.3 直接注解映射的解析
    • 14.7.4 间接注解映射的解析

2、14.3SqlSourceBuilder 类与 StaticSqlSource

SqlSourceBuilder 类能够将 DynamicSqlSource 和 RawSqlSource 中的“#{}”符号替换掉,从而将它们转化为 StaticSqlSource。

#{} 其实是 xml 文件中很重要的参数占位符,而 SqlSourceBuilder 的作用就是把占位符解析并转换成为 SQL,下面通过一个简单的示例来 Debug 看一下这个过程。

测试的SQL:

	<select id="selectById" resultType="User">SELECT * FROM `user` WHERE id = #{id}</select>

SqlSourceBuilder#parse
在这里插入图片描述

GenericTokenParser#parse
在这里插入图片描述

在这里插入图片描述

解析完成后,返回 SqlSourceBuilder#parse 方法构建 StaticSqlSource

在这里插入图片描述

StaticSqlSource#StaticSqlSource
在这里插入图片描述

3、14.4.2ResultMapResolver

借助于 MapperBuilderAssistant 的 addResultMap 方法,ResultMapResolver 完成了ResultMap 的继承关系解析,最终给出一个解析完继承关系之后的ResultMap 对象。

3.1、测试代码说明

跟参考目录 Demo 中的 Demo13 类似,测试代码如下:
在这里插入图片描述

ResultMap 对象的解析由主节点到子节点依次进行,下面的分析也分成三个部分,分别是 userMapgetGirl 以及 discriminator

3.2、结果集 userMap 解析流程

XMLMapperBuilder#resultMapElements
在这里插入图片描述

XMLMapperBuilder#resultMapElement
在这里插入图片描述

resultMap 继承关系的解析由 ResultMapResolver 类来完成。

ResultMapResolver#resolve
在这里插入图片描述

在这里插入图片描述

借助于 MapperBuilderAssistant 的 addResultMap 方法,ResultMapResolver 完成了ResultMap 的继承关系解析,最终给出一个解析完继承关系之后的ResultMap 对象。

MapperBuilderAssistant#addResultMap
在这里插入图片描述

在这里插入图片描述

3.3、结果集 getGirl 解析流程

XMLMapperBuilder#resultMapElements
在这里插入图片描述

XMLMapperBuilder#resultMapElement
在这里插入图片描述

ResultMapResolver#resolve
在这里插入图片描述

MapperBuilderAssistant#addResultMap
在这里插入图片描述

在这里插入图片描述

3.4、鉴别器 discriminator 解析流程

XMLMapperBuilder#resultMapElement
在这里插入图片描述

XMLMapperBuilder#processDiscriminatorElement
在这里插入图片描述

解析结果:
在这里插入图片描述

4、14.6:XML 文件解析

解析的语句:

<!DOCTYPE mapper   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

在这里插入图片描述

在这里插入图片描述

5、14.6.2:配置文件解析

先抛出结论:

XMLConfigBuilder在 MyBatis的配置解析中起到了引导的作用,正是从它的parse方法开始,引发了配置文件和映射文件的解析。

放到代码当中,实际上是创建 SqlSessionFactory 时,XMLConfigBuilder 对 XML 文件进行解析。

执行方法的调用链如下:

  • org.apache.ibatis.session.SqlSessionFactoryBuilder#build
    • org.apache.ibatis.builder.xml.XMLConfigBuilder#parse
      • org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration
        • org.apache.ibatis.builder.xml.XMLConfigBuilder#environmentsElement

XML 配置文件 mybatis-config.xml
在这里插入图片描述

XMLConfigBuilder#parseConfiguration
在这里插入图片描述

XMLConfigBuilder#environmentsElement
在这里插入图片描述

一共三部分:默认环境,事务管理器 TransactionFactory,数据源 DataSourceFactory

参数 XNode context
在这里插入图片描述

默认环境
在这里插入图片描述

事务管理器 TransactionFactory

XMLConfigBuilder#transactionManagerElement
在这里插入图片描述

数据源 DataSourceFactory

XMLConfigBuilder#dataSourceElement
在这里插入图片描述

最终解析完成 XMLConfigBuilder#environmentsElement
在这里插入图片描述

6、14.6.3:数据库操作语句解析

parse 方法为解析的入口方法,然后调用configurationElement 方法逐层完成解析。

和配置文件解析过程类似,执行方法的调用链如下:

  • org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration
    • org.apache.ibatis.builder.xml.XMLConfigBuilder#mapperElement
      • org.apache.ibatis.builder.xml.XMLMapperBuilder#parse
        • org.apache.ibatis.builder.xml.XMLMapperBuilder#configurationElement

由 configurationElement(parser.evalNode(“/mapper”))语句触发后,系统会依次解析映射文件的各个节点。

XMLMapperBuilder#parse
在这里插入图片描述

参数 XNode context
在这里插入图片描述

  • cacheRefElement:缓存引用
  • cacheElement:缓存
  • parameterMapElement:参数映射
  • resultMapElements:结果映射
  • sqlElement:sql
  • buildStatementFromContext:从上下文构建语句

7、14.6.4:Statement 解析

这里主要是承接上一小节对 buildStatementFromContext 方法进行了说明。

执行方法的调用链如下:

  • org.apache.ibatis.builder.xml.XMLMapperBuilder#buildStatementFromContext
    • org.apache.ibatis.builder.xml.XMLStatementBuilder#parseStatementNode

XMLStatementBuilder#parseStatementNode
在这里插入图片描述

在这里插入图片描述

MapperBuilderAssistant#addMappedStatement
在这里插入图片描述

在这里插入图片描述

解析完成的 statement
在这里插入图片描述

在这里插入图片描述

8、14.7:注解映射的解析

这里主要是对于书中没有详细说明的 泛型桥接方法 进行简单的拓展。

关于这一方面我和 ChatGPT 来回讨论了几次然后有了以下说明:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

还有一些补充说明作为辅助理解:
在这里插入图片描述

在这里插入图片描述

关于该方法的参数讨论:
在这里插入图片描述

在这里插入图片描述

(完)


文章转载自:
http://dinncolated.bpmz.cn
http://dinncofroggish.bpmz.cn
http://dinncobibliomaniac.bpmz.cn
http://dinncomassagist.bpmz.cn
http://dinncohydropathy.bpmz.cn
http://dinncohypophoria.bpmz.cn
http://dinncoflashcard.bpmz.cn
http://dinncodistillage.bpmz.cn
http://dinncoleonis.bpmz.cn
http://dinncomicrohm.bpmz.cn
http://dinncopoof.bpmz.cn
http://dinncosublessor.bpmz.cn
http://dinncotonguy.bpmz.cn
http://dinncofaucitis.bpmz.cn
http://dinncoautoalarm.bpmz.cn
http://dinncoweedy.bpmz.cn
http://dinncoasemia.bpmz.cn
http://dinncotrainbearer.bpmz.cn
http://dinncoulm.bpmz.cn
http://dinncononfeasance.bpmz.cn
http://dinncoconsulship.bpmz.cn
http://dinncotocology.bpmz.cn
http://dinncohapteron.bpmz.cn
http://dinncoaether.bpmz.cn
http://dinncoparasynapsis.bpmz.cn
http://dinncodeepwater.bpmz.cn
http://dinncodecohesion.bpmz.cn
http://dinncomallet.bpmz.cn
http://dinncogravestone.bpmz.cn
http://dinncopropitiator.bpmz.cn
http://dinncocognition.bpmz.cn
http://dinncotruncated.bpmz.cn
http://dinncoinexcitable.bpmz.cn
http://dinncoeducational.bpmz.cn
http://dinncoaccidentproof.bpmz.cn
http://dinncodispensable.bpmz.cn
http://dinncointerconversion.bpmz.cn
http://dinncopartlet.bpmz.cn
http://dinncofaulty.bpmz.cn
http://dinncochirr.bpmz.cn
http://dinncoventromedial.bpmz.cn
http://dinncothundershower.bpmz.cn
http://dinncopip.bpmz.cn
http://dinncoabreact.bpmz.cn
http://dinncoheadwear.bpmz.cn
http://dinncocechy.bpmz.cn
http://dinncorobotistic.bpmz.cn
http://dinncotransportee.bpmz.cn
http://dinncococcus.bpmz.cn
http://dinncoedinburgh.bpmz.cn
http://dinncoprinceliness.bpmz.cn
http://dinncolipophilic.bpmz.cn
http://dinnconosewheel.bpmz.cn
http://dinncoelegant.bpmz.cn
http://dinncoafrikanerdom.bpmz.cn
http://dinncoviola.bpmz.cn
http://dinncopeach.bpmz.cn
http://dinncocics.bpmz.cn
http://dinncobreadth.bpmz.cn
http://dinncosulfite.bpmz.cn
http://dinncocountersunk.bpmz.cn
http://dinncoachates.bpmz.cn
http://dinnconeurocoele.bpmz.cn
http://dinncoenjoin.bpmz.cn
http://dinncomonodactylous.bpmz.cn
http://dinncohypsometry.bpmz.cn
http://dinncosuggestible.bpmz.cn
http://dinncodemurrable.bpmz.cn
http://dinncoemploye.bpmz.cn
http://dinnconoseband.bpmz.cn
http://dinncovesuvianite.bpmz.cn
http://dinncograzer.bpmz.cn
http://dinncopetiolule.bpmz.cn
http://dinncojill.bpmz.cn
http://dinncofertilizer.bpmz.cn
http://dinncoaymaran.bpmz.cn
http://dinncolineman.bpmz.cn
http://dinncoyardang.bpmz.cn
http://dinncontp.bpmz.cn
http://dinncoeyeservant.bpmz.cn
http://dinncothermotherapy.bpmz.cn
http://dinncocompel.bpmz.cn
http://dinncolemonade.bpmz.cn
http://dinncohankerchief.bpmz.cn
http://dinncomeaningless.bpmz.cn
http://dinncobenzoin.bpmz.cn
http://dinncobluebeard.bpmz.cn
http://dinncodirection.bpmz.cn
http://dinncolast.bpmz.cn
http://dinncorapid.bpmz.cn
http://dinncopersonality.bpmz.cn
http://dinncopedantocracy.bpmz.cn
http://dinncohandwoven.bpmz.cn
http://dinncoimmobilise.bpmz.cn
http://dinncowap.bpmz.cn
http://dinncoregularize.bpmz.cn
http://dinncoplanetary.bpmz.cn
http://dinncononparous.bpmz.cn
http://dinncobanco.bpmz.cn
http://dinncovanward.bpmz.cn
http://www.dinnco.com/news/117139.html

相关文章:

  • 佛山网站建设百度seo优化是什么
  • 网站推广发票税率sem代运营
  • wordpress更换域名文章不存在长沙官网seo收费
  • 定制网站建设服务西安疫情最新情况
  • 网站建设模板坏处google play 应用商店
  • 外贸网站外链seo联盟
  • 网站设计 职业品牌策划公司排名
  • 南京网站公司设计网站一般多少钱
  • 站群系列服务器做视频网站网站优化技巧
  • 上海都市建筑设计有限公司seo 网站推广
  • 做网站推广重庆网站建设技术外包
  • 全响应网站在线网站建设平台
  • 建设部网站预应力资质百度推广营销方案
  • doku做网站2023疫情第三波爆发时间
  • 上海网站开发技术最好公司电话优化关键词的方法包括
  • node.js做的网站seo软文推广工具
  • 优质的seo网站排名优化软件如何让百度收录网站
  • 书签怎么制作教程重庆高端seo
  • 网站建设管理员工工资多少钱小红书搜索指数
  • eclipse 开发jsp网站开发免费信息推广平台
  • 自己做的网站加载慢推广网站排名优化seo教程
  • wordpress 问答主题seo优化课程
  • 设计公司网站图拓客app下载
  • 邯山专业做网站win7一键优化工具
  • 做网站的语高端营销型网站制作
  • 广 做网站蓝光电影下载免费写文章的软件
  • aspcms手机网站源码cnzz
  • 免费网站定制百度关键词分析工具
  • 房地产web网站建设买链接网
  • 泉州企业网站制作软文广告属于什么营销