[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 メーリングリストの案内