在 myBatis 映射器中首先解析哪些参数,# 或 $ ones?

What parameters are parsed the first in myBatis mapper, # or $ ones?

我在映射器中使用了一个标签,其中的文本包含一些外部#{}参数:

<sql id="searchInInterval">
    (r01.start between to_date(#{${what}Date}, 'MMYYYY') and to_date(#{thirdDate}, 'MMYYYY'))

稍后在 XML 映射器中,当我使用它时

<include refid="searchInInterval">
    <property name="what" value="first"/>
</include>

,首先解析什么参数? # 还是 $ 一个?

${}(文本替换)首先解决。

如果 ${} 像你的例子一样在 <sql /> 中,MyBatis 会在解析映射器文件时尝试替换它(即在应用程序启动期间)。
如果在这个阶段没有找到匹配的属性[1],MyBatis会在语句执行时通过查找运行时参数尝试替换它

[1] 除了嵌套在 <include /> 中的 <property /> 之外,您还可以在 configuration 中声明属性。