いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

iBatis奮闘記-0014 (結果をXML形式で取得する)

iBatisのクエリー発行方法には、結果をXML形式で取得する方法もあります。
XML形式で取得する際も、普通にselectするのと手順は変わりませんが、
以下の点を守らなければなりません。

  1. resultClass属性に"xml"と指定する
  2. xmlResultName属性を追加する。
  3. XML形式の取得属性を付加できるのは、statementとselect要素のみ

xmlResultName属性には、結果として受け取るXMLのルート要素名を指定します。

以下、サンプルです。
テーブルは前回作成したSAMPLE010_TEST_TABLEを流用しています。
また、XML形式で取得する場合は、Mapで受け取る場合と同じくデータクラスを定義する
必要はありません。
なお、結果データの型はjava.lang.Stringとなっています。(一行のみの場合は、Stringそのもの。Listで取得した場合はList<String>です)

[SQLマッピングファイル]

<?xml version="1.0" encoding="Windows-31J"?>
<!-- vim:set ts=4 sw=4 et ws is nowrap ft=xml: -->
<!DOCTYPE sqlMap 
          PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
          "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="XMLResult">

    <typeAlias alias="Sample010TestTable" type="gsf.samples.ibatis.sample010.Sample010TestTable"/>

    <select id="selectAllSample010TestTableAsXML" resultClass="xml" xmlResultName="sample010_test_table">
        select
             id
            ,value1
            ,value2
            ,value3
        from
            SAMPLE010_TEST_TABLE
        order by
            id
    </select>

</sqlMap>

[動作確認クラス]

// vim:set ts=4 sw=4 et ws is nowrap ft=java:
package gsf.samples.ibatis.sample011;

import java.util.*;
import java.sql.*;

import gsf.interfaces.sqlmap.*;
import gsf.utils.sqlmap.*;

import com.ibatis.sqlmap.client.*;

public class IBatisSample011{

    private static class XMLResultExecutor implements SqlMapClientExecutor{

        public Object execute(SqlMapClient sqlMap) throws SQLException{
            return sqlMap.queryForList("selectAllSample010TestTableAsXML", null);
        }

    }

    public static void main(String[] args){

        for(String s : (List<String>)SqlMapUtils.executeNoTransaction(new XMLResultExecutor())){
            System.out.println(s);
        }

    }

}

動作させてみると、以下のような結果が得られます.

exec:
     [java] <?xml version="1.0" encoding="UTF-8"?><sample010_test_table><ID>1</ID><VALUE1>value1-001</VALUE1><VALUE2>value2-011</VALUE2><VALUE3>value3-348</VALUE3></sample010_test_table>
     [java] <?xml version="1.0" encoding="UTF-8"?><sample010_test_table><ID>2</ID><VALUE1>value1-002</VALUE1><VALUE2>value2-032</VALUE2><VALUE3>value3-489</VALUE3></sample010_test_table>
     [java] <?xml version="1.0" encoding="UTF-8"?><sample010_test_table><ID>3</ID><VALUE1>value1-003</VALUE1><VALUE2>value2-034</VALUE2><VALUE3>value3-098</VALUE3></sample010_test_table>
     [java] <?xml version="1.0" encoding="UTF-8"?><sample010_test_table><ID>4</ID><VALUE1>value1-004</VALUE1><VALUE2>value2-048</VALUE2><VALUE3>value3-934</VALUE3></sample010_test_table>
     [java] <?xml version="1.0" encoding="UTF-8"?><sample010_test_table><ID>5</ID><VALUE1>value1-005</VALUE1><VALUE2>value2-002</VALUE2><VALUE3>value3-485</VALUE3></sample010_test_table>

エンコーディングは、デフォルトでUTF-8になるみたいです。