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#
の形で、書くことができる。
':'で区切るやり方は、古くて、','で区切るやり方が新しい。
Escape
# と $の文字をSqlMapのSQL文に含めたいときは重ねて記述する。
## 、 $$
