[Seasar-user:4830] Re: S2DAO で 3 つ以上のテーブルを連結させる方法について

Yasuo Higa [E-MAIL ADDRESS DELETED]
2006年 10月 20日 (金) 11:02:09 JST


ひがです。

> はじめまして。
> 2週間ほど前からSeasarを触り始めた、
> ともやと申します。
> 
> さて、私は現在e-learningの開発に携わっています。
> そのシステムでは、
> クラスのテーブル、講座のテーブル、
> クラスと講座の関連を表すテーブルと、
> 3つを連結させて検索を行う、
> ということが頻繁に起こります。
> クラスのテーブルを仮にclass_table、
> 講座のテーブルを仮にcourse_table、
> クラスと講座の関連を表すテーブルをclass_courseとすると、
> クラスの名称はclass_tableに、
> 講座の名称はcourse_tableに存在し、
> class_courseにはclass_table、course_tableのキーを持つのみです。
> あるクラスに紐付く講座の名称を取得しようとした場合は、
> 3つのテーブルを連結させなければなりません。

2つのテーブルの連結する例で説明します。
3つの場合も同じようにできます。

従業員名と部署名を取得したいとします。
従業員名は従業員テーブルに部署名は部署テーブルにあります。

まず、受け取りたい結果を格納するDTOを作ります。

public class EmpDto {
    private String ename;
    private String dname;
    ...
}

次にDaoを作成します。

public interface EmpDtoDao {
    public static final Class BEAN = EmpDto.class;
    public List find();
}

次にDaoと同じパッケージにクラス名_メソッド名.sqlの
ファイルをおきます。今回のケースはEmpDtoDao_find.sqlです。

そのファイルに
SELECT emp.ename, dept.dname FROM emp, dept
WHERE emp.deptno = dept.deptno
のようにJOINするSQLを書きます。
SELECT文の返す結果は、DTOのプロパティ名とあわせます。

これで、自由に複数のテーブルをジョインした結果を取得できます。

Yasuo Higa
The Seasar Project



Seasar-user メーリングリストの案内