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

1、重要的接口和类

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

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//静态的sqlSourcesapache

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

 

2、sql树

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

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

二、sql树

 

3、重要接口的做用

一、LanguageDriver

  • 制造:SqlSource3d

  • 制造:ParameterHandlerxml

二、SqlSource

  • 制造:BoundSql对象

三、SqlNode

  • 处理本身类型的sql节点,并根据当前请求的参数生成本身类型sql片断,拼接至DynamicContextblog

四、DynamicContext

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

4、生成sql语句

第一阶段

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

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

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

 

第二阶段

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

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

相关文章
相关标签/搜索