2005年03月17日

iBATISの動的SQL2

SqlMapのバインド変数で、$と#の違いについて


$XXX$→PreparedStatementの固定文字(そのプロパティの値で置き換わる)
#XXX#→PreparedStatementのバインド変数(?に置き換わる)
として扱われる。
<select id="foo">
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = $empno$
</select>
<select id="baa">
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = #empno#
</select>

上記のSqlMapステートメントは、動作は同じだが、
fooのほうは
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = XXX
baaのほうはjava.sql.PreparedStatement
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = ?
のようになる。
これを見るとできるだけ、#を使ったほうがいい気がする。

#XXX#を使用する場合、属性として
#propertyName:javaType=string:jdbcType=VARCHAR:mode=IN:nullValue=N/A:handler=string#
#propertyName,javaType=string,jdbcType=VARCHAR,mode=IN,nullValue=N/A,handler=string#
の形で、書くことができる。
':'で区切るやり方は、古くて、','で区切るやり方が新しい。
  • propertyName
  •  プロパティ名
  • javaType
  •  マップされるJavaの型
  • jdbcType
  •  JDBCでの型
  • mode
  •  ストアドプロシージャーのパラメータの種類
  • nullValueNull
  •  だったら置き換える。(おそらくInsert、Updateのときしか使わない)
  • handler
  •  iBATISで扱うハンドラ

    Escape


    # と $の文字をSqlMapのSQL文に含めたいときは重ねて記述する。
    ## 、 $$
    posted by tfunato at 01:53 | コメント[0] | トラックバック[0] | iBATIS このエントリーを含むはてなブックマーク はてなブックマーク - iBATISの動的SQL2
    この記事へのコメント
    コメントを書く
    お名前:

    メールアドレス:

    ホームページアドレス:

    コメント:

    ※承認されるまで反映されません!
    この記事へのTrackBack URL
    http://blog.seesaa.jp/tb/2451052