MyBatis模块的动态Sql原理

  mybatis的动态sql的原理  

    mybatis框架将xml里面的sql语句构成一个一个节点,每个节点由一种SqlNode对象描述。org.apache.ibatis.scripting.xmltags包下面的以SqlNode结尾的类就是这种对象,以下是所有的SqlNode类型:

  ChooseSqlNode

  ForEachSqlNode

  MixedSqlNode

  SetSqlNode

  StaticTextSqlNode

  TextSqlNode

  TrimSqlNode

  VarDeclSqlNode

  WhereSqlNode

  ifSqlNode

  针对父类的SqlNode接口,定义了每种SqlNode必须实现的方法,apply(DynamicContext context),这个动态上下文就是能够依次顺序执行所有SqlNode的核心类。

  每一个动态sql由多个sqlNode节点构成,其根节点是MixedSqlNode,这个节点先执行apply方法,在这个apply里面,依次执行子节点的apply方法,那么在每个子节点里面,也会依次执行apply方法,这样递归的执行下去,而上下文,就是用来保存参数,构建动态sql的prepareStatement的参数,和保存最终生成sql的StringBuilder对象的。

  这里好像没有使用访问者模式啊。

  每当调用mapper的方法时,都会执行根节点的apply方法,拼接成包含内部包含?的sql语句,然后调用preparedStatement,然后setPrepare方法设置参数,来执行动态sql。

  mybatis框架跟spring mvc类似,具有类似的处理过程。

  1.对模板类中方法对象的处理,比如参数名称解析,参数实参绑定

  2.通过代理方式调用实际的方法,

  3.处理实际方法调用后产生的返回值

转载于:https://www.cnblogs.com/weiguangyue/p/9348957.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值