QA@IT

iBatisで$で指定したパラメータがブランクになる

3905 PV

iBatisで#で指定したパラメータは正しく引き渡されますが$で指定したパラメータがブランクになる場合があります。
iBatisのバグでしょうか?それとも使い方に誤りがあるのでしょうか?
※myBatisへのリプレースも検討していますが、なかなか時間が取れずiBatisのままで使用しています。

・iBatisバージョン
iBatis-2.3.4.726.jar

・SQL-MAPの内容

<select id="select_TBL_XXXX" parameterClass="com.sample.Parameter" resultClass="java.lang.String">
SELECT NAME FROM $schema$.tbl WHERE ID = 'XXXX' AND TYPE = #type# Order By ORDER_NO $end_string$
</select>

・log4j出力内容

Preparing Statement:    SELECT NAME FROM .tbl WHERE ID = 'XXXX' AND TYPE = ? Order By ORDER_NO 
Executing Statement:    SELECT NAME FROM .tbl WHERE ID = 'XXXX' AND TYPE = ? Order By ORDER_NO 
Parameters: [AAA]
Types: [java.lang.String]

・Parameterクラスの実装

package com.sample;

public class Parameter {
    private String  schema      = null;
    private String  type        = null;
    private String  end_string  = null;

    public Parameter() {
        this.schema     = "TEST";
        this.type       = "XXXX";
        this.end_string = " FOR READ ONLY WITH UR ";
    }

    public void setSchema(String arg) {
        this.schema = arg;
    }

    public void setType(final String arg) {
        this.type = arg;
    }

    public String getType() {
        return this.type;
    }
}
  • 私も少し前(といっても1年ぐらい前ですが)までiBatisを使っていました。parameterClassで指定している"com.sample.Parameter"クラスの実装を提示して頂けると何かわかるかもしれません。 -
  • レスありがとうございます。
    Parameterクラスの実装を追記します。
    -

回答

Parameterクラスにschemaと、end_stringに対するGetterがないからだと思いますよ。
iBatisはリフレクションを利用して、Getterから値を取得しているはず。

編集 履歴 (0)
  • ご回答ありがとうございます。
    確かにGetterがありませんね。。。

    しかし、腑に落ちないのは、毎回ブランクになるのではなく正常に$で指定するパラメータが渡されて動作する場合もあることです。

    同じ様な現象にはまっている方はおられないのでしょうか・・・。
    -
  • まったく同じコード、つまりGetterがない状態で動作する場合があるのですか? -
ウォッチ

この質問への回答やコメントをメールでお知らせします。