- association(一對(duì)一 嵌套結(jié)果(一條sql 一次查詢))
Tips:
1恨搓、resultMap 可以通過(guò)extends 實(shí)現(xiàn)繼承照瘾,來(lái)簡(jiǎn)化工作量
2梅垄、關(guān)聯(lián)查詢?cè)O(shè)置前綴是一個(gè)好習(xí)慣
3落剪、通過(guò)添加完成整的命名空間想帅,可以引用其他xml文件的resultMap
<resultMap id="userAndPostion" extents="BaseResultMap" type="TUSER">
<association property="postion" javaType="TPosition" columnPrefix="post_">
<id column="id" property="id"/>
<result column="name" property="postName"/>
<result column="note" property="note"/>
</association>
</resultMap>
<select id="selectUserPostion" resultMap="userAndPosition">
select a.id,user_name,sex,b.id post_id, b.name post_name, b.note post_note
from t_user a, t_positiion b
where a.psotion_id = b.id
</select>
association(一對(duì)一 嵌套查詢(多次查詢))
這里我們可以在association 標(biāo)簽上添加fetchType="lazy"(eager)场靴,并且把配置文件中setting 下aggressiveLazyLoading 設(shè)置成false(按需加載) 來(lái)設(shè)置成懶加載
<resultMap id="userAndPostion" extents="BaseResultMap" type="TUSER">
<association property="postion" column="position_id" select="com.enjoy.mybatis.mapper.TPositionMapper.selectById"/>
</resultMap>
collection(一對(duì)多)
- collection 支持的屬性以及屬性的作用和association完全相同
- mybatis 會(huì)個(gè)根據(jù)id 標(biāo)簽,進(jìn)行字段的合并港准,合理配置好ID 標(biāo)簽可以提高處理效率
discriminator 鑒別器映射
在特定的情況下旨剥,根據(jù)一個(gè)字段去使用不同的pojo進(jìn)行關(guān)聯(lián),功能很像java 中的switch叉趣;
discriminator 標(biāo)簽常用的兩個(gè)屬性如下:
column:該屬性用于設(shè)置要進(jìn)行鑒別比較值的列
javaType:該屬性用于指定列的類型泞边,保證使用相同的java類型來(lái)比較值discirminator 標(biāo)簽可以有1個(gè)或多個(gè)case標(biāo)簽,case 標(biāo)簽包含以下三個(gè)屬性
value:該值為discriminator 指定column用來(lái)匹配的值
resultMap:當(dāng)column的值和value的值匹配時(shí)疗杉,可以配置使用resultMap指定的映射阵谚,resultMap優(yōu)先級(jí)高于resultType
resultType:當(dāng)column的值和value 的值匹配時(shí)蚕礼,用于配置使用resultType指定的映射
<resultMap id="userAndHealthReport" extends="BaseResultMap" type="User">
<discriminator column="sex" javaType="int">
<case value="1" resultMap="userAndHealthReportMale">
<case value="2" resultMap="userAndHealthReportFemale">
</discriminator>
</resultMap>
<resultMap id="userAndHealthReportMale" extends="userAndHealthReport" type="User">
<collection property="healthReports" column="id" select="com.enjoy.mybatis.HealthReportMalMapper.selectById">
</collection>
</resultMap>
<resultMap id="userAndHealthReportFemale" extends="userAndHealthReport" type="User">
<collection property="healthReports" column="id" select="com.enjoy.mybatis.HealthReportFemalMapper.selectById">
</collection>
</resultMap>