在mapper文件中访问mybatis sql中的public static final字符串

mic*_*oon 8 java sql parameters constants mybatis

我有一个用MyBatis映射文件写的sql,它是这样的:

<select id="somesql">
   select a,b,c from tbl_name where d = ?
</select>
Run Code Online (Sandbox Code Playgroud)

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

public static final String d = "d_value";
Run Code Online (Sandbox Code Playgroud)

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

没有硬编码!!!

小智 11

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

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


Bog*_*dan 2

据我所知,对于 MyBatis 的开箱即用行为,您不能这样做。

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

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

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