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
(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