首页 > 解决方案 > myBatis 映射器中首先解析哪些参数,# 或 $ 的?

问题描述

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

<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>

,首先会解析什么参数?# 还是一美元?

标签: sqlxmlmybatismybatis-sql

解决方案


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

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

[1] 除了<property />嵌套 inside ,您还可以在配置<include />中声明属性。


推荐阅读