10

我有一个写在 MyBatis 映射器文件中的 sql,如下所示:

<select id="somesql">
   select a,b,c from tbl_name where d = ?
</select>

的占位符值d应该是在名为的文件中声明的常量Constants.java

public static final String d = "d_value";

如何在不实际在 <select>构造中传递参数的情况下用值替换占位符?我试过#{com.pkg.name.Constants.d}了,但没有用。

没有硬编码!!!

4

2 回答 2

15
<select id="getConvenienceStoreList" resultType ="Store">
    SELECT * FROM Store
    WHERE type = ${@foo.product.constant.StoreType@CONVENIENCE_STORE}
    ORDER BY id
    LIMIT #{start}, #{limit}
</select>

参考:http: //qiita.com/ApplePedlar/items/12dc389cc32f3db5557a

于 2016-08-03T10:06:29.183 回答
2

据我所知,使用 MyBatis 的开箱即用行为,你不能。

您可以尝试为 ParameterHandler 编写一个拦截器并在那里注入值,但这并不总是可行的,因为您只能在参数处理程序上使用两种方法:

  • getParameterObject它返回发送到查询的参数(可以是常量、字符串、映射、自定义对象甚至 null,因为在您的示例中,您不发送参数)
  • setParameters如果您知道参数在准备好的语句中的位置(大多数情况下您可能不知道),我想您可以尝试设置参数。

我的建议是将它作为参数传递给您的查询。MyBatis 的拦截器功能没有很好的文档记录,因此您可能无法从一开始就获得正确的工作组合,最终您可能会遇到比其价值更多的麻烦。

于 2012-09-23T17:47:41.790 回答