org.apache.ibatis.scripting.LanguageDriver //语言驱动
org.apache.ibatis.scripting.xmltags.XMLLanguageDriver //xml语言驱动,Configuration默认的语言驱动(在new configuration对象时,注入的语言驱动)
org.apache.ibatis.scripting.defaults.RawLanguageDriver//未加工的语言驱动

org.apache.ibatis.mapping.SqlSource //将mapper.xml中的sql语句解析成该对象
org.apache.ibatis.scripting.xmltags.DynamicSqlSource //动态sql的实现类,内部依赖了sql树sqlNode
org.apache.ibatis.scripting.defaults.RawSqlSource//不完全的RawSqlSource
org.apache.ibatis.builder.StaticSqlSource//静态的sqlSources

org.apache.ibatis.scripting.xmltags.SqlNode //动态sql节点

 

二、sql树

1、sql语句的构建,是基于建造者模式。

org.apache.ibatis.scripting.xmltags.XMLScriptBuilder//构建sql语句

2、sql树

【mybatis源码学习】mybatis的sql语句映射

 

三、重要接口的作用

1、LanguageDriver

  • 制造:SqlSource

  • 制造:ParameterHandler

2、SqlSource

  • 制造:BoundSql

3、SqlNode

  • 处理自己类型的sql节点,并根据当前请求的参数生成自己类型sql片段,拼接至DynamicContext

4、DynamicContext

  • 处理当前请求,将不同类型SqlNode处理完的sql片段,拼接成一个完整的sql语句

四、生成sql语句

第一阶段

在项目初始化的时候,解析mapper.xml文件

基于构建者模式,使用XMLStatementBuilder生成MappedStatement

MappedStatement依赖DynamicSqlSource或RawSqlSource(依赖LanguageDriver生成)

 

第二阶段

在项目运行过程中的时候,从MappedStatement中获取DynamicSqlSource或RawSqlSource

基于构建者模式,使用SqlSourceBuilder生成StaticSqlSource,再从StaticSqlSource中生成BoundSql

【mybatis源码学习】mybatis的sql语句映射

相关文章:

  • 2022-12-23
  • 2021-08-08
  • 2021-07-04
  • 2022-01-13
  • 2021-09-04
  • 2021-09-26
  • 2021-08-21
猜你喜欢
  • 2021-07-29
  • 2021-06-01
  • 2021-08-06
  • 2021-05-07
相关资源
相似解决方案