首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mybatis 解析 SQL 源码分析二

本文首发于个人公众号 Java 技术大杂烩,欢迎关注 Mybatis Mapper.xml 配置文件中 resultMap 节点的源码解析 Mybatis 解析 SQL 源码分析一 Mybatis...Mapper 接口源码解析 Mybatis 数据库连接池源码解析 Mybatis 类型转换源码分析 Mybatis 解析配置文件的源码解析 前言 在上两篇文章 Mybatis 解析 SQL 源码分析一...和 Mybatis Mapper.xml 配置文件中 resultMap 节点的源码解析 中分析了 Mybatis 是如何解析 Mapper.xml 配置文件的,配置文件中配置的 SQL 节点被解析成了一个个的...下面就来看下这部分的源码,看看 Mybatis 是如何解析的。...该部分的解析会涉及到 组合模式 和 OGNL 表达式的应用 SqlSource 在 Mybatis 解析 SQL 源码分析一 文章中我们知道,配置文件中的 SQL 语句会被解析成 SqlSource

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Spark Sql 源码剖析(一):sql 执行的主要流程

,便开始研读相关的源码以及写相应的文章,这篇便作为 Spark Sql 系列文章的第一篇。...既然是第一篇,那么就来说说在 Spark Sql 中一条 sql 语句的主要执行流程,来看看下面这个简单的例子: val spark = SparkSession .builder() .appName...下面,我们分别来看看这两大块 sql 语句到 sqlDataFrame 这个过程的 uml 时序图如下: ?...根据该时序图,我们对该过程进一步细分: 第1~3步:将 sql 语句解析为 unresolved logical plan,可以大致认为是解析 sql 为抽象语法树 第4~13步:使用之前得到的 unresolved...这篇文章是一片相对宏观的整体流程的分析,目的有二: 一是说清楚 Spark Sql 中一条 sql 语句的执行会经过哪几个核心的流程,各个核心流程大概做了什么 二是这里指出的各个核心流程也是接下来进一步进行分析学习的方向

2K10

go-sql-driver 源码分析

一、go-sql-driver使用过程 1、建立连接 首先是Open, db, err := sql.Open(“mysql”, “user:password@/dbname”) db 是一个*sql.DB...的主要方法: Exec Query QueryRow Close 用法与DB类似 Rows的主要方法: Cloumns//返回[]string,column names Scan Next Close 二、源码分析...1,初始化 golang的源码包里database/sql只定义了连接池和常用接口、数据类型 具体到mysql 的协议实现在 github.com/go-sql-driver/mysql 因此我们需要在使用的时候这样导入依赖...import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) 这个import做了什么呢 _ "github.com/go-sql-driver...先看下golang 源码中驱动相关的代码,定义在这个文件中:src/database/sql/sql.go var drivers = make(map[string]driver.Driver

43000

Flink SQL Window源码全解析

本文内容: Flink SQL WINDOW功能介绍 底层实现源码分析:StreamExecGroupWindowAggregate创建WindowOperator 底层实现源码分析:WindowOperator...算子处理数据这两个地方源码分析。...由于flink-planner-blink SQL中目前只支持TimeWindow相应的表达语句(TUMBLE、HOP、SESSION),因此,本文主要介绍TimeWindow SQL示例和逻辑,CountWindow...WindowOperator源码调试 为了更直观的理解Window内部运行原理,这里我们引入一个Flink源码中已有的SQL Window测试用例,并进行了简单的修改(即修改为使用HOP滑动窗口) classWindowJoinITCase...,只是使用的方式不一样 1、Emit策略 Emit 策略是指在Flink SQL 中,query的输出策略(如能忍受的延迟)可能在不同的场景有不同的需求,而这部分需求,传统的 ANSI SQL 并没有对应的语法支持

2K30

Mybatis 解析 SQL 源码分析一

本文首发于个人公众号 Java 技术大杂烩,欢迎关注 相关文章 Mybatis Mapper 接口源码解析 Mybatis 数据库连接池源码解析 Mybatis 类型转换源码分析 Mybatis 解析配置文件的源码解析...Mapper.xml 配置文件中解析SQL,二是把 SQL 解析成为数据库能够执行的原始 SQL,把占位符替换为 ?...配置文件的时候,会调用 bindMapperForNamespace 进行注册Mapper接口,表示该配置文件对应的Mapper接口`,关于 Mapper 的注册可以参考 Mybatis Mapper 接口源码解析...namespace="com.someone.application.data.SomeMapper"/> 2 3cacheRefElement(context.evalNode("cache-ref")); 解析的源码如下...在 Mybatis 中使用 SqlSource 来表示 SQL语句,但是这些SQL 语句还不能直接在数据库中进行执行,可能还有动态SQL语句和占位符等。

62930

MyBatis源码分析三:Sql执行

一、MyBatis中Sql执行过程 先上一段代码,看直接调用MyBatis Api是如何执行Sql的: // 获取配置文件输入流 InputStream inputStream = Resources.getResourceAsStream...那Sql到底是怎么执行的,明明第一步只定义了一个接口,Java中接口是不能实例化的,只能通过类来实例的,它是如何和我们在Xml中编写的Sql绑定的呢?...} } 其中resolveMappedStatement会在Configuration中查找是否有注册相应的MappedStatement,具体过程参考下一篇文章 MyBatis源码分析二...MapperMethod,执行接口的方法就是执行MapperMethod的execute方法,在执行过程中通过查找接口名称对应的MapperedStatement对象(代表一条Sql语句)来执行相应的Sql...,从而达到接口和Sql关联 。

32700

「ShardingSphere」SQL 解析器源码剖析

在阅读官方文档的过程,看到这么一段描述:“核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成”。...SQL路由,根据解析上下文匹配用户配置的分片策略,并生成路由路径 SQL改写,将SQL改写为在真实数据库中可以正确执行的语句。 SQL执行,通过多线程执行器异步执行。...它将原始的 SQL 字符串拆解成了 ParseTree 的对象。...四、jar 源码解析 pom.xml parent 项目是 shardingsphere-sql-parser 工程。...五、总结 以上是“SQL解析器”的源代码内容,这部分代码主要运用到了工厂模式、单例模式、cache 缓存,以及 antlr 解析 SQL 语法的第三方插件来实现的。

1.3K30

「ShardingSphere」SQL 解析器源码剖析

在阅读官方文档的过程,看到这么一段描述:“核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成”。...SQL路由,根据解析上下文匹配用户配置的分片策略,并生成路由路径 SQL改写,将SQL改写为在真实数据库中可以正确执行的语句。 SQL执行,通过多线程执行器异步执行。...它将原始的 SQL 字符串拆解成了 ParseTree 的对象。...四、jar 源码解析 pom.xml parent 项目是 shardingsphere-sql-parser 工程。...五、总结 以上是“SQL解析器”的源代码内容,这部分代码主要运用到了工厂模式、单例模式、cache 缓存,以及 antlr 解析 SQL 语法的第三方插件来实现的。

1K41

MyBatis源码分析四:动态Sql实现

一、什么是动态SQL&MyBatis的支持 动态Sql即最终执行的Sql是根据输入参数确定的,最常用的场景是输入参数为一个对象,里面有3个属性,我们会做一个通用的查询方法,然后某个属性不为空则在WHERE...可以理解为这就是一个动态Sql对象的描述。 ? 2、SqlNode 用于描述Mapper Sql配置中的Sql节点,这个是实现动态Sql非常基础的一个类。 ?...它只有一个方法apply,用于将自己添加到最终的sql中,我们看下最简单的TextSqlNode,它代表sql中无标签的内容: public boolean apply(DynamicContext...MixedSqlNode表示,节点有先后顺序; 4、生成Sql过程如下:调用每个SqlNode的apply将自己加到最终的大Sql中,然后解析Sql中${}部分,将这一部分内容转换成JDBC要求的格式,...,然后增加一个参数绑定; 5、最终调用JDBC的Api完成Sql执行,具体可以看以前的文档MyBatis源码分析三:Sql执行。

1K10
领券