Mybatis的SqlSession执行sql过程

本文详细分析了Mybatis中SqlSession执行sql的来源,从MappedStatement的getBoundSql方法开始,探讨了DynamicSqlSource、TextSqlNode如何处理sql,以及GenericTokenParser如何将占位符替换为实际参数,最终构建完整的sql。
摘要由CSDN通过智能技术生成

​上一篇分析了SqlSession执行sql的过程,其中并没有分析sql是从哪里来的,今天就来仔细分析下。

Sql来源

从上一篇的最后一步执行sql那里倒推sql的来源,源码主要过程如下图:

1sql出现.png

可以看到最后是通过BoundSql直接获取的sql,然后往前倒推最后发现是通过MappedStatement的getBoundSql方法返回的。MappedStatement在之前分析mapper的时候知道一个执行sql对应一个MappedStatement对象,它封装有mybatis中需要执行一条sql的所有信息,所以从这里获取也是理所应当的。

MappedStatement的getBoundSql方法

那么就来看下MappedStatement的getBoundSql方法吧,源码如下图:

2sql引出.png

首先是右边MappedStatement的getBoundSql方法,这次改了下sql传递了两个参数,但是对程序基本没什么影响。可以看到BoundSql是通过SqlSource创建的,通过debug知道是DynamicSqlSource对象。

左边是DynamicSqlSource的getBoundSql方法,可以先看后面的创建BoundSql对象,是通过Sql

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值