Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Javaでも。
[go: Go Back, main page]

■iBATIS version2.0.9 - sqlMaps / parameterMap を使う

はじめに

parameterMap は SQL Map ファイルを書くときに定義することができます。
SQL とそこに渡すパラメータとの対応づけをしたいときに使います。
この対応付け。インラインパラメータを使った方が簡単なのであまり使われることは無いかも知れませんが、parameterMap を使うとどことなく xml がすっきりした感じになる等の利点もあります。
つまりは、お好みで使い分けってことです。

ちなみに。インラインパラメータは #プロパティ名# の様に指定するやり方。

parameterMap を使う

parameterMap を使うときにすること次の 2 つ。

  1. parameterMap を定義する
  2. parameterMap を使う指定をする

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 タグ ]
parameterMap の定義はこのタグで。
子の要素として parameter タグを記述することができます。
id 属性にはこの定義を特定するための id を付けます。
class 属性にはパラメータとなるクラス名(完全)を指定します。
省略できない属性 -- id
[ parameter タグ ]
parameter タグではパラメータとなるクラスのプロパティについて詳細を記述します。
property 属性にはパラメータとなるクラスのプロパティ名を指定します。
jdbcType 属性にはプロパティをセットする先のデータベース列の型を指定します。java.sql.Types クラスの定数名で指定します。
javaType 属性にはプロパティの型を指定します。省略時は Object 扱い。
nullValue 属性には null に置き換える値を指定します。
例えば nullValue が -1 の時にプロパティの値として -1 が渡されてくると、データベースの列にセットされる値は null になります。
省略できない属性 -- property

ここまでで一応定義の方は終わり。
あとはこれを使うように指定してあげるのみ。
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);
        }       
    }
}

まとめ