外部ファイルSQLの実行

ということで、外部ファイルに記述されたSQLファイルを実行する方法を調べる。
ドキュメントを読むと命名規則があるらしい。

  • examples.dao.EmployeeDao#getAllEmployees()
    • ∟examples/dao/EmployeeDao_getAllEmployees.sql

サンプルを見る限りでは同じディレクトリにあるSQLファイルをチェックしていると推測される。というわけで試してみよう。
地球連邦軍のユニット一覧をidでソートし、所属情報を含めて取得してくる」SQLを試す。
まず、ユニットデータDAOのインターフェース(UnitDataDao.java)に

public List getEFSFUnitDataList();

を追記する。これに対応するsqlファイル名は

  • UnitDataDao_getEFSFUnitDataList.sql

になるので、DAOと同じフォルダにUnitDataDao_getEFSFUnitDataList.sqlを作成し、

select
 *
from
 UNITDATA u
 inner join BELONGTO b
 on(u.BELONG_TO_CODE = b.CODE)
where
 u.BELONG_TO_CODE = '1'
order by
 u.ID
;

と記述する。そしてテストケースを書く。

public final void testGetEFSFUnitDataList(){
  List list = unitDataDao.getEFSFUnitDataList();
  assertEquals("リストのサイズが一致しません",2,list.size());
}

ここまで書いて、いったいどんなオブジェクトで結果が返されるのだろうという事が分からない事に気付いた。
とりあえず2行目にブレークポイントをはってデバッグで実行してみた。
すると返ってきたのは普通のUnitDataEntityの配列だった。つまりinner joinは結果に反映されていないようなのだ。
結果は確かにorder by句とwhere句が反映されたものだったので外部ファイルのSQLを実行するのは成功しているようだ。