iBatisのクエリー発行方法には、結果をXML形式で取得する方法もあります。
XML形式で取得する際も、普通に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になるみたいです。