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のインターセプターを作成してそこに値を挿入することもできますが、パラメーターハンドラーで2つのメソッドしか使用できないため、これが常に可能であるとは限りません。

  • getParameterObjectこれは、クエリに送信されたパラメータを返します(定数、文字列、マップ、カスタムオブジェクト、またはパラメータを送信しない例の場合のようにnullの場合もあります)
  • setParametersプリペアドステートメントのどこにあるかがわかっている場合は、パラメータを設定してみることができると思います(ほとんどの場合、そうではないかもしれません)。

私の提案は、それをパラメータとしてクエリに渡すことです。MyBatisのインターセプター機能は十分に文書化されていないため、最初から正しい組み合わせが得られない可能性があり、その価値以上の問題が発生する可能性があります。

于 2012-09-23T17:47:41.790 に答える