IBatisで内部結合(JOIN)してクエリでの取得方法
(DAO Framework使用版)

SHAINテーブルとBUSHOテーブルをBUSHO_IDで結合して
SHAINとBUSHOテーブルの情報を同時に取得

SQL

select *
from SHAIN, BUSHO
WHERE SHAIN.BUSHO_ID = BUSHO.BUSHO_ID

取得用メソッド
  selectAllByPrimaryKey

結合元の SqlMap.xmlに結合クエリを定義
(getShainsでクエリを実行)

<select id="getShains" resultMap="abatorgenerated_ShainResult" parameterClass="dto.Shain">
select *
from SHAIN, BUSHO
WHERE SHAIN.BUSHO_ID = BUSHO.BUSHO_ID
AND SHAIN_ID = #shainId#
</select>

結果返却用クラス(dto.Shain)の定義も修正
(結合相手(BUSHO)から結合させるカラムの定義を追加。BUSHO_ID、BUSHO_NAME、EXTENSIN_NUM))

<resultMap id="abatorgenerated_ShainResult" class="dto.Shain" >
<!--
WARNING - This element is automatically generated by Abator for iBATIS, do not modify.
This element was generated on Sun Jun 20 18:14:25 JST 2010.
-->
<result column="SHAIN_ID" property="shainId" jdbcType="INTEGER" />
<result column="SHAIN_NAME" property="shainName" jdbcType="VARCHAR" />
<result column="BUSHO_ID" property="busho.bushoId" jdbcType="INTEGER" />
<result column="BUSHO_NAME" property="busho.bushoName" jdbcType="VARCHAR" />
<result column="EXTENSION_NUM" property="busho.extensionNum" jdbcType="INTEGER" />
</resultMap>


結合元(返却用)のDTOクラス(SHAIN)に結合相手のDTOクラス(BUSHO)のメンバに追加
(getter、setter含む)

public class Shain {

private Busho busho;

/**
* @return busho
*/
public Busho getBusho() {
return busho;
}

/**
* @param busho セットする busho
*/
public void setBusho(Busho busho) {
this.busho = busho;
}

DAOのインタフェース(ShainDAO)に結合用取得メソッド(selectAllByPrimaryKey)の定義追加

public interface ShainDAO

  public Shain selectAllByPrimaryKey(Shain key);

インタフェースの実装
(ShainDAOImplがDAOの実装クラスにselectAllByPrimaryKeyメッソドを実装)


public class ShainDAOImpl extends SqlMapDaoTemplate implements ShainDAO {


public ShainDAOImpl(DaoManager daoManager) {
super(daoManager);
}

public Shain selectAllByPrimaryKey(Shain key) {
Shain record = (Shain) queryForObject("SHAIN.getShains", key);
return record;
}

呼び出し例

Shain shain = new Shain();

shain.setShainId(111);

// 検索処理(JOIN)
shain = dao.selectAllByPrimaryKey(shain);
System.out.println("-----検索(JOIN)結果-----");
System.out.println("shainId = " + shain.getShainId());
System.out.println("shainName = " + shain.getShainName());
System.out.println("bushoName = "
+ shain.getBusho().getBushoName());
System.out.println("bushoExtensinNum = "
+ shain.getBusho().getExtensionNum());
System.out.println("\n");



参考
http://thinkit.co.jp/cert/article/0606/13/3/2.htm