parameterMap は SQL Map ファイルを書くときに定義することができます。
SQL とそこに渡すパラメータとの対応づけをしたいときに使います。
この対応付け。インラインパラメータを使った方が簡単なのであまり使われることは無いかも知れませんが、parameterMap を使うとどことなく xml がすっきりした感じになる等の利点もあります。
つまりは、お好みで使い分けってことです。
ちなみに。インラインパラメータは #プロパティ名# の様に指定するやり方。
parameterMap を使うときにすること次の 2 つ。
parameterMap を使ったときの xml はこんな感じです。
<parameterMap id="map-Sample" class="javademo.ibatis.Sample">
<parameter property="id" jdbcType="NUMERIC" javaType="java.lang.Long"/>
<parameter property="description" jdbcType="VARCHAR" nullValue="==NO_ENTRY=="/>
</parameterMap>
<insert id="insertSample3" parameterMap="map-Sample">
INSERT INTO SAMPLE
VALUES(?, ?)
</insert>
parameterMap の定義をしているところ。それはまさに parameterMap タグです。
この中にパラメータとなるクラスのプロパティとデータベース上の列との対応づけを書きます。
parameterMap タグの中にはプロパティごとに parameter タグを記述していきます。
この記述した順番で SQL の中の ? と対応づけられます。
この辺りは PreparedStatement と同じ様なイメージです。
タグの詳細は次の通り。
ここまでで一応定義の方は終わり。
あとはこれを使うように指定してあげるのみ。
parameterMap は <insert> なんかの SQL を扱うタグで使うように指定ができます。
<insert id="insertSample3" parameterMap="map-Sample">
INSERT INTO SAMPLE
VALUES(?, ?)
</insert>
やり方は簡単。タグの parameterMap 属性に id を書いてやるだけ。
id はもちろん定義した parameterMap タグの id。
あと parameterMap 属性を指定するときに気にとめておくことは
これくらい。
それでは今回のサンプルのすべてを。
データベースは相変わらず HSQLDB。
テーブルの構造はこれ。
CREATE TABLE SAMPLE(
ID NUMERIC(8) NOT NULL,
DESC VARCHAR(200)
)
次に、sqlMapConfig.xml。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:hsql://localhost"/>
<property name="JDBC.Username" value="sa"/>
<property name="JDBC.Password" value=""/>
</dataSource>
</transactionManager>
<sqlMap resource="maps/Sample.xml" />
</sqlMapConfig>
今回のメインである SQL Map ファイル。Sample.xml。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Sample">
<parameterMap id="map-Sample" class="javademo.ibatis.Sample">
<parameter property="id" jdbcType="NUMERIC" javaType="java.lang.Long"/>
<parameter property="description" jdbcType="VARCHAR" nullValue="==NO_ENTRY=="/>
</parameterMap>
<insert id="insertSample3" parameterMap="map-Sample">
INSERT INTO SAMPLE
VALUES(?, ?)
</insert>
</sqlMap>
パラメータとなるクラス。
package javademo.ibatis;
public class Sample{
private Long id;
private String description;
public Long getId(){
return this.id;
}
public void setId(Long id){
this.id = id;
}
public String getDescription(){
return this.description;
}
public void setDescription(String desc){
this.description = desc;
}
}
最後は実行するところ。
package javademo.ibatis;
import java.io.Reader;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;
public class Run {
public static void main(String[] args) {
try{
// 準備作業
Reader reader = Resources.getResourceAsReader("maps/sqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
// いざ実行
Sample sample = new Sample();
sample.setId(new Long(1));
sample.setDescription("description");
sqlMap.insert("insertSample3", sample);
Sample sample2 = new Sample();
sample2.setId(new Long(3));
sample2.setDescription("==NO_ENTRY==");
sqlMap.insert("insertSample3", sample2);
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
}