2012-08-14 53 views
6

我有寫在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

就MyBatis的開箱即用行爲而言,據我所知,你不能。

你可以試着寫一個interceptor for the ParameterHandler並注入存在的價值,但是這不能總是可能的,因爲你可以在參數處理程序兩種方法只玩:

  • getParameterObject返回這是參數發送到查詢(可以是一個常量,字符串,地圖,自定義對象,甚至爲空,因爲它是你的例子,你不發送參數的情況下)
  • setParameters我想你可以嘗試如果你知道它在準備好的語句上的位置(大多數情況下你不會這麼做),請設置參數。

我的建議是將它作爲參數傳遞給您的查詢。 MyBatis的攔截器功能沒有很好的記錄,所以你可能從一開始就沒有得到正確的工作組合,並且最終會帶來更多的麻煩。

3
<select id="getConvenienceStoreList" resultType ="Store"> 
    SELECT * FROM Store 
    WHERE type = ${@[email protected]_STORE} 
    ORDER BY id 
    LIMIT #{start}, #{limit} 
</select> 

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

+0

其實,這個作品!但請注意,該值是「按原樣」粘貼的,不會轉義,也不會引用。所以,如果你不使用它的數字,你至少不得不加引號。 – 2016-08-18 15:39:55

+0

實際上,除了事實上,我們並沒有使用STATIC FINAL常量,而是直接調用一些靜態方法,如下所示:${@foo.product.constant.StoreType @getWhereClausule()} – kensai 2016-11-09 10:21:43

相關問題