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

时间:2012-08-14 08:00:51

标签: java sql parameters constants mybatis

我有一个用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},但它没有用。

没有硬编码!!!

2 个答案:

答案 0 :(得分:10)

<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

答案 1 :(得分:2)

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

您可以尝试编写interceptor for the ParameterHandler并在那里注入值,但这并非总是可行,因为您只能在参数处理程序上使用两种方法:

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

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