DynamicContext用来存储执行过程产生的结果sql,具有追加sql片段的能力,而且,这个对象里面保存了,方法执行而来的参数对象parameterObject。
每个sqlNode节点都会执行apply方法,这样,就能让sqlNode里面的子节点有机会得到执行,当执行到需要判断的sqlNode时,如ifSqlNode,会将参数对象带入test表达式,执行判断,如果返回true,则继续执行ifSqlNode里面的节点的apply方法。
其中,有一个节点的执行比较另类,WhereSqlNode.
<where>
<if test="a != null">
name = #{name}
</if>
</where>
where标签的执行结果依赖于if标签的执行结果,所以,很有意思。
递归的执行if标签的apply方法,总能得到执行后的返回值,而返回值是true,则where标签继续处理。