メイン

2006年04月21日

関連するテーブルの情報取得

RDBを利用していると、かならず複数のテーブルには関連性があります。
アプリケーションを作成するときに、それらの情報を結合して処理をすることになります。

2つのテーブルに対し別々にSQLを発行して、その結果をビジネスロジック側で結合すればよいことになりますが、iBatisでは、ResultMapの記述を工夫することで、簡単に値を取り出すことができます。
例えば、2つのテーブル(Table1とTable2)が存在し、JavaのBean側は、Bean1がBean2をプロパティとして持っているとします。
こんなときには、以下ののようなマッピングファイルを準備しましょう。

<resultMap id="bean1HasBean2" class="sample.iBatis.bean1">
    <result property="id" column="TABLE1_ID" />
    <result property="value" column="TABLE1_VALUE" />
    <result property="bean2Obj" column="TABLE2_ID" select="getBean2" />
</resultMap>

<select id="getBean1" parameterClass="string" resultMap="bean1HasBean2">
    SELECT * FROM TABLE1 WHERE TABLE1_ID = #value#
</select>
<select id="getBean2" parameterClass="string" resultClass="sample.iBatis.bean2">
    SELECT TABLE2_ID AS id, TABLE2_VALUE AS value FROM TABLE2 WHERE TABLE2_ID = #value#
</select>


このようなSqlMapを作成して、getBean1を呼び出せば、getBean1で取得した「TABLE2_ID」の値を利用して、getBean2が実行され、getBean2の結果が、bean2Objに設定されるということになります。

簡単に使いたいケースでは結構使えるかもしれません。
ただし、このような使い方を行った場合、テーブルの関連性によっては、多数のSQLが発行されるケースが考えられます。
例えば、getBean1の結果が大量の行を返すような場合です。

それに、通常SQLを使っているような方なら、テーブルをJOINして取得することを考えると思います。
iBatisでは、マッピングファイルにSQL文を直接記述するので、JOINした結果を取得するのも簡単にできます。
以下では、JOINを利用して上記と同じ結果を取得するためのサンプルを記述していきます。

続きを読む "関連するテーブルの情報取得" »

2006年04月04日

iBatisで使いまわし

SQLを使ったアプリケーションを作成していると、同じ条件文が発生したりすることがあると思います。 例えば、件数を取得するSQLと情報自体を取得するSQLなどですね。
このような場合、iBatisでは、以下のように記述することで、同じ条件文を使いまわしたりすることができるようになります。


<sql id="userWhere">
    <dynamic prepend="WHERE">
        <isPropertyAvailable prepend="AND" property="AND_id_NULL">
            id IS NULL
        </isPropertyAvailable>
        <isPropertyAvailable prepend="OR" property="OR_id_NULL">
            id IS NULL
        </isPropertyAvailable>
        <isPropertyAvailable prepend="AND" property="AND_id_NOTNULL">
            id IS NOT NULL
        </isPropertyAvailable>
        <isPropertyAvailable prepend="OR" property="OR_id_NOTNULL">
            id IS NOT NULL
        </isPropertyAvailable>
        <isPropertyAvailable prepend="AND" property="AND_name_EQ">
            name = #name#
        </isPropertyAvailable>
        <isPropertyAvailable prepend="AND" property="AND_name_LIKE">
            name like #name#
        </isPropertyAvailable>
    </dynamic>
</sql>

<select id="getUser3" resultMap="resultUser" parameterClass="java.util.Map">
    SELECT ID AS id,
           NAME AS name
      FROM USER_TABLE
  <include refid="userWhere" />
</select>

<select id="getCountUser3" parameterClass="java.util.Map">
    SELECT COUNT(*)
      FROM USER_TABLE
  <include refid="userWhere" />
</select>

続きを読む "iBatisで使いまわし" »

2006年03月20日

iBatisで動的SQL

iBatisで動的なSQLを発行する方法ですが、sqlMap.xmlの内容を編集するだけです。
以下に簡単な例をあげておきます。(sqlMap内のselectタグだけ記載しています)
<select id="getUser2" resultMap="resultUser"> SELECT ID AS id, NAME AS name FROM USER_TABLE <dynamic prepend="WHERE"> <isGreaterThan property="id" compareValue="0"> ID=#id# <isGreaterThan> </dynamic> </select>

続きを読む "iBatisで動的SQL" »

2006年03月10日

iBatis-sqlMapファイル内内に<>の記号を記述する

これまでのsqlMapファイルには、<>の記号を使ってきませんでした。

sqlMapファイルはXMLで書くため、<>の記号を利用する必要がある場合には、注意しなければなりません。



といっても、その場合の記述方法は簡単で、



<![CDATA[



]]>



で囲んであげればOKです。

続きを読む "iBatis-sqlMapファイル内内に<>の記号を記述する" »

2006年03月06日

iBatisでSELECT(2つのテーブルからデータ取得)

データベースを利用しているシステムでは、必ず複数のテーブルが存在し、かつ、リレーションしています。
今回は、複数のテーブルからの情報取得について、書こうと思います。

今回も基本的な環境は同じで、テーブルを新たに追加します。
IDITEM_NAME
1ITEM1
1ITEM2
1ITEM3
2ITEM1
2ITEM2
3ITEM3

IDの部分は、今まで利用してきた、USER_TABLEのIDを外部キーとしたものです。
ユーザが複数のアイテムを持っているようなケースと考えてください。
(ただし、複数のテーブルから情報を取得することが目的なので、正規化等の話はまったくなしで進めます。)

続きを読む "iBatisでSELECT(2つのテーブルからデータ取得)" »

2006年03月03日

iBatisでINSERT(自動採番値の利用)

iBatisを使ってINSERTを行う際に、自動採番で採番された情報をINSERTのパラメータとして利用し、 かつ、その採番した値を取得する方法について説明します。
環境は「iBatisでSELECT」と同様ですが、Postgresを利用しているので、自動採番用で利用するシーケンスの作成をしておきます。

CREATE SEQUENCE userid_seq
  START 1000

START で1000を指定していますが、ただ単にこれまでINSERTしてきたデータよりも大きい値を設定しておきたかったためです。

続きを読む "iBatisでINSERT(自動採番値の利用)" »

2006年03月01日

iBatisでINSERT,UPDATE,DELETE

sqlMapを利用し、INSERT、UPDATE、DELETEを行ってみます。
動作環境等については、「iBatisでSELECT」と同じです。
追加、変更する部分についてのみ説明していきたいと思います。

続きを読む "iBatisでINSERT,UPDATE,DELETE" »

タオソフトウェア

tao twitter
tao twitter
tao twitter

広告