一、重要的接口和类

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树

三、重要接口的作用

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

最新文章

  1. 中文Locale
  2. php服务端写日志文件
  3. Do less things
  4. 一次MVVM+ReactiveCocoa实践
  5. 教您如何使用SQL中的SELECT LIKE like语句
  6. Sublime Text 3 配置浏览器预览路径 localhost
  7. Tcp 数据对象传输接口对象设计
  8. Oracle中sign函数和decode函数的使用
  9. C#操作Xml:使用XmlWriter写Xml
  10. 深入理解line-height
  11. mysql的读写分离
  12. mysql的一点小错误
  13. css图片根据div宽高比例自适应
  14. Android学习之基础知识五—编写聊天界面
  15. 校内模拟赛 旅行(by NiroBC)
  16. Hadoop Mapreduce 案例 wordcount+统计手机流量使用情况
  17. es6(16)--Decorator
  18. MySql数据类型范围
  19. javascript中的this到底指什么?
  20. nginx keepalive 高可用

热门文章

  1. VS2017 密钥
  2. Node: 通过Console打印日志 (Log Message via Console)
  3. maven学习笔记一(认识maven)
  4. ArcGIS pro 发布地图服务(一)动态地图服务
  5. SQL进阶系列之4HAVING字句的力量
  6. Relief 过滤式特征选择
  7. 使用CefSharp在C#访问网站,支持x86和x64
  8. test20190925 老L
  9. How Open Source Became The Default Business Model For Software
  10. Bootstrap内辅助类,响应式工具,组件的个人总结