« Tracプラグインインストール | トップページ | S2JDBCでSQLファイルを使う その2 »

S2JDBCでSQLファイルを使う

S2JDBCでエンティティにマッピングされることを確かめたので、
今度は、SQLファイルを使ってプレーンな表形式のデータを取得する。

Dtoを準備する。

public class DeptDto {

public String id;

public String deptNo;

public String deptName;

public String loc;

public String versionNo;

public String empNo;

public String empName;

}

DeptServiceにSQLファイルを実行し、Dtoに格納する以下のメソッドを追加

public List<DeptDto> findAll3() {
  return selectBySqlFile(DeptDto.class, "deptFindAll3.sql")
   .getResultList();
}

DeptActionで、findAll3を実行するように修正。JSPに渡すListはエンティティではなく、DTOのリストに変更しておく。

public String index() {
  deptItems = deptService.findAll3();
  return "list.jsp";
}

以下のSQLファイル(deptFindAll3.sql)を作成

SELECT
        D.DEPT_NO
        ,D.DEPT_NAME
        ,D.LOC
        ,D.VERSION_NO
        ,E.EMP_NO
        ,E.EMP_NAME
    FROM
        DEPT D INNER JOIN EMP E
            ON D.ID = E.DEPT_ID;

SQLファイルは、resourcesのソースフォルダにsqlのフォルダを作って格納する。
デフォルトでは、META-INF配下に格納するようにS2AbstractService内で設定されているが、どうも使いづらかったので、AbstractService内にてオーバーライドしておいた

protected void setEntityClass(Class<ENTITY> entityClass) {
  this.entityClass = entityClass;
  sqlFilePathPrefix = "org/uramessier/demo/sql/";
}

JSPファイルを修正し、DeptのデータをEmpのデータを結合して一覧形式で表示させる。

  <td>
   ${f:h(e.deptNo)}
  </td>
  <td>
   ${f:h(e.deptName)}
  </td>
  <td>
   ${f:h(e.loc)}
  </td>
  <td>
   ${f:h(e.empNo)}
  </td>
  <td>
   ${f:h(e.empName)}
  </td>
  <td>
   ${f:h(e.versionNo)}
  </td>

deptの一覧を表示すると、SQLで取得した表形式データがそのまま表示される。
S2jdbcsql

画面に表示するデータは、エンティティとしてDBを踏まえ構造化されたオブジェクトよりも、単純なDTOのリストの方が使いやすいケースが多いと思われる。(DBの構造を意識してJSPをコーディングする必要もなくなる)

また、O/Rマッピングされる場合、全てのデータ項目を取得するが、SQLの場合は、画面上で必要なデータだけ取得してくれる。

|

« Tracプラグインインストール | トップページ | S2JDBCでSQLファイルを使う その2 »

Seasar2」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1119684/27412738

この記事へのトラックバック一覧です: S2JDBCでSQLファイルを使う:

« Tracプラグインインストール | トップページ | S2JDBCでSQLファイルを使う その2 »