S2Unitをそろそろ
SQL*PLUSやObject Browser片手に単体テストするのも、面倒くさいってレベルじゃねえぞ、って感じなのでそろそろS2Unitを使ってみようと思う。何からはじめたらいいかわからないけど、ドキュメントを軽く見たらデータベースの内容をExcelに簡単に出力できるらしいのでまずこれから。
- 環境の準備
- diconファイルの準備
最低限、必要なdiconファイルは3つ
-
- app.dicon (名前は任意)
- jdbc.dicon
- convention.dicon
それぞれの簡単な説明
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> </components>
- Javaクラスの準備
ドキュメントに書いてる内容を、ほぼそのままコピー。ファイル名やクラス名を変えただけ。
//パッケージやimportの定義は省く public class Excel { private static final String PATH = "app.dicon"; public static void main(String[] args) { S2Container container = S2ContainerFactory.create(PATH); container.init(); try { SqlReader reader = (SqlReader) container.getComponent(SqlReader.class); XlsWriter writer = (XlsWriter) container.getComponent(XlsWriter.class); writer.write(reader.read()); } finally { container.destroy(); } } }
- 実行
作成したJavaのクラスを実行するだけで、データベースの内容がExcelに出力された。これはすごい。めちゃくちゃ楽。
後は、app.diconの内容を適当に修正するだけで色々なExcelファイルが作成できる。
- app.diconの内容
とりあえず、最小構成はこんな感じかな。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components.dtd"> <components> <include path="jdbc.dicon"/> <component class="org.seasar.extension.dataset.impl.SqlReader"> <initMethod>#self.addTable("TEST_MASTER")</initMethod> </component> <component class="org.seasar.extension.dataset.impl.XlsWriter" instance="prototype"> <arg>"../src/test.xls"</arg> </component> </components>
この部分がデータの取得とExcelへの出力内容を定義する場所。この定義だと「TEST」の全データがExcelに出力される。シート名は「TEST」になる。
<component class="org.seasar.extension.dataset.impl.SqlReader"> <initMethod>#self.addTable("TEST")</initMethod> </component>
もちろん条件を指定することも可能。2番目の引数に条件句を定義。これだと「TESTテーブルのTEST_NO=0」のデータがExcel出力される。
<component class="org.seasar.extension.dataset.impl.SqlReader"> <initMethod>#self.addTable("TEST","TEST_NO=0")</initMethod> </component>
SQLも直接書ける。2番目の引数が出力されるExcelのシート名。
<component class="org.seasar.extension.dataset.impl.SqlReader"> <initMethod> #self.addSql("SELECT TEST_NO FROM TEST","TEST_SQL") </initMethod> </component>
複数のテーブルも一度に定義できる。これが便利。出力は別々のシートに出力される。
<component class="org.seasar.extension.dataset.impl.SqlReader"> <initMethod>#self.addTable("TEST1")</initMethod> <initMethod>#self.addTable("TEST2","TEST_NO=0")</initMethod> <initMethod>#self.addSql("SELECT TEST_NO FROM TEST","TEST3")</initMethod> </component>
最後にexcel出力場所の定義を一応説明。既にファイルが存在する場合は上書きされるようです。ここはあんまり深く見てません。。
<component class="org.seasar.extension.dataset.impl.XlsWriter" instance="prototype"> <arg>"../src/test.xls"</arg> </component>
今日は以上。まだ自動テストにはいってないけど、これだけでも意外と便利だった。