2017-07-31 43 views
0

是否有可能在MyBatis的結合靜態參數化<sql>reusable fragments<if>dynamic SQL如何查詢MyBatis <sql>片段的靜態參數的值?

如何查詢的靜態值(= 從Java方法來,而是直接在XML映射進入)的MyBatis <sql>片段的參數?

的問題是如何MyBatis的比較String價值,但如何查詢靜態參數的價值。

我想用靜態參數source調用可重用元素select-part

我試圖寫<if test="...">條件的各種方法,但都失敗:

  • <if test="source == 'active'">
  • <if test="${source} == 'active'">
  • <if test="#{source} == 'active'">

簡化XML映射是這樣的:

<sql id="select-part"> 
    SELECT d.field1, d.field2, ..., d.fieldN 
    <if test="${source} == 'active'"> 
     , null AS archivedDate 
     FROM active_table d 
    </if> 
    <if test="${source} == 'archive'"> 
     , d.achived AS archivedDate 
     FROM archive_table d 
    </if> 
    LEFT JOIN ... 
    ORDER BY ... 
</sql> 

<select id="fetchData" resultMap="Data"> 
    <include refid="select-part"> 
     <property name="source" value="active"/> 
    </include> 
    UNION ALL 
    <include refid="select-part"> 
     <property name="source" value="archive"/> 
    </include> 
</select> 
+0

https://stackoverflow.com/questions/19450304/mybatis-compare-string-value-using-dynamic-query嘗試使用等於 – StanislavL

+0

@StanislavL問題不在於如何比較字符串,而是如何訪問靜態參數。問題是如何查詢源變量的值。它的行爲不像來自Java方法的值。我編輯了問題並更改了標題。 –

回答

1

不幸的是,當前的實現有一個「bug」,它不能代替SQL片段中XML屬性中的佔位符。只有文本節點中的佔位符纔會被替換。我認爲這是應該修復的實施中的一個錯誤。我已經在我的fork中實現了這個功能:https://github.com/kmoco2am/mybatis-3,我將嘗試推入原始存儲庫。

+0

拉請求在此打開: https://github.com/mybatis/mybatis-3/pull/1070 –