zoukankan      html  css  js  c++  java
  • 【mybatis源码学习】mybatis的sql语句映射

    一、重要的接口和类

    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

  • 相关阅读:
    字符编码
    visual studio 2015 安装记录和问题修复
    TCP状态转换图的理解
    静态库与动态库的编译链接
    运行库glibc
    堆栈的简单认识
    Makefile学习总结
    关于STM32单片机的IAP实现
    ubuntu12.0.4安装启动后无法进入图形操作界面
    观察者模式
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/11407979.html
Copyright © 2011-2022 走看看