mapparにはprefixがあるといいと思う
たとえばこんなテーブルがあったとして
/**********************************/
/* テーブル名: 配送先 */
/**********************************/
CREATE TABLE HAISOUSAKI(
HAISOUSAKI_ID INTEGER PRIMARY KEY,
CUSTOMER_NO INTEGER NOT NULL,
HAISOUSAKI_YUUBIN_NO VARCHAR(16),
HAISOUSAKI_TODOUFUKEN VARCHAR(16),
HAISOUSAKI_SIKUCHOUSON VARCHAR(128),
FOREIGN KEY (CUSTOMER_NO) REFERENCES CUSTOMER (CUSTOMER_NO)
);/**********************************/
/* テーブル名: 請求先 */
/**********************************/
CREATE TABLE SEIKYUUSAKI(
SEIKYUUSAKI_ID INTEGER PRIMARY KEY,
CUSTOMER_NO INTEGER NOT NULL,
SEIKYUUSAKI_YUUBIN_NO VARCHAR(16),
SEIKYUUSAKI_TODOUFUKEN VARCHAR(16),
SEIKYUUSAKI_SIKUCHOUSON VARCHAR(128),
FOREIGN KEY (CUSTOMER_NO) REFERENCES CUSTOMER (CUSTOMER_NO)
);
こういうエンティティにマッピングする場合は
/**配送先*/
public class Haisousaki {
private Integer haisousaki_id;
private Integer customer_no;
private Address address;
…/**請求先*/
public class Seikyuusaki{
private Integer seikyuusaki_id;
private Integer customer_no;
private Address address;
…/**アドレス*/
public class Address {
private String yuubin_no;
private String todoufuken;
private String sikuchouson;
…
こんなマッパーが書けたらいいのになあと思っただけなんです。
<!--配送先の検索-->
<select id="find" parameterType="int" resultMap="haisousakiMap">
select
haisousaki_id,
customer_no,
haisousaki_yuubin_no,
haisousaki_todoufuken,
haisousaki_sikuchouson
from HAISOUSAKI where haisousaki_id = #{id}
</select>
<!--請求先の検索-->
<select id="find" parameterType="int" resultMap="haisousakiMap">
select
seikyuusaki_id,
customer_no,
seikyuusaki_yuubin_no,
seikyuusaki_todoufuken,
seikyuusaki_sikuchouson
from SEIKYUUSAKI where seikyuusaki_id = #{id}
</select><!--配送先のresultMap-->
<resultMap id="haisousakiMap" type="firststep.entity.Haisousaki">
<result property="haisousaki_id" column="haisousaki_id"/>
<result property="customer_no" column="customer_no"/>
<association
property="address" column="haisousaki_id"
javaType="firststep.entity.Address"
resultMap="firststep.mapper.COMMONVALUEMapper.addressMap"
prefix="haisousaki_">
</resultMap><!--請求先のresultMap-->
<resultMap id="haisousakiMap" type="firststep.entity.Seikyuusaki">
<result property="seikyuusaki_id" column="seikyuusaki_id"/>
<result property="customer_no" column="customer_no"/>
<association property="address"
column="seikyuusaki_id" javaType="
firststep.entity.Address"
resultMap="firststep.mapper.COMMONVALUEMapper.addressMap"
prefix="seikyuusaki_">
</resultMap><!--AddressのresultMap-->
<resultMap id="addressMap" type="firststep.entity.Address">
<result property="${prefix}yuubin_no" column="yuubin_no"/>
<result property="${prefix}todoufuken" column="todoufuken"/>
<result property="${prefix}sikuchouson" column="sikuchouson"/>
</resultMap>
SELECT〜ASで指定しろよといわれるかもしれませんが、上記の例でいれば配送先と請求先を同時に結合したときにResultMapが再利用できなくなります。これはいまいちだと思うんですよね。こういう形にしておけば基本的にはResultMapはバリューオブジェクトに対してひとつだけ書き、prefixを使うことでいろいろなクエリで再利用できるんじゃないかなーと思ってみたんですけどね。
マッパーの拡張って簡単にできるんですかね?まだちまちま使ってみているだけなのでなんともいえないですが。そもそもDTDの修正がいる時点で駄目か…