mybatis级联查询

级联是在resultMap标签中配置。级联不是必须的,级联的好处是获取关联数据十分便捷,但是级联过多会增加系统的复杂度,同事降低系统的性能,次增彼减,所以记录超过3层时,就不要考虑使用级联了,因为这样会造成多个对象的关联,导致系统的耦合、负载和难以维护。

MyBatis中的级联分2种:
  1.一对一(association)
  2.一对多(collection)

一、一对一
  A表一对一B表情况下A对象当中有外键关联的B表的对象作为属性,A对象中有一个B对象属性。当查A对象时,如果想把B对象属性同时获取,有三种方式。

三种方式:
  1、多表联合查询,即A表和B表联合查询,同事查出A、B表的字段,然后配置resultMap标签。

resultMap标签的配置如下:

<resultMap id="AResultMap" type="com.A" >
    <id column="A_ID" property="AId" jdbcType="INTEGER" />
    <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" />
    <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" />
    <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" />
<!-- 一下是对A对象中B的属性的映射配置 -->
<result column="B_id" property="b.BId"/>
    <result column="ONLINE_DATE" property="b.onlineDate"/>
    <result column="LAST_COMM_TIME" property="b.lastCommTime"/>
    <result column="STATUS_CODE" property="b.statusCode"/>
</resultMap>

2、多表联合查询,即A表和B表联合查询,同事查出A、B表的字段,然后通过association标签配置resultMap标签。

resultMap标签的配置如下:

<resultMap id="AResultMap" type="com.A" >
      <id column="A_ID" property="AId" jdbcType="INTEGER" />
      <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" />
      <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" />
      <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" />
  <!-- 一下是对A对象中B的属性的映射配置 -->
   <association property="b" javaType="com.B">
        <id column="B_id" property="bId"/>
        <result column="ONLINE_DATE" property="onlineDate"/>
        <result column="LAST_COMM_TIME" property="lastCommTime"/>
        <result column="STATUS_CODE" property="statusCode"/>
    </association> 
 </resultMap>

3、只查询A表字段,然后通过外键调用查询B表的select标签查询B表对象,通过association标签配置resultMap标签。
    resultMap标签的配置如下:

<resultMap id="AResultMap" type="com.A" >
      <id column="A_ID" property="AId" jdbcType="INTEGER" />
      <result column="ASSET_NO" property="assetNo" jdbcType="VARCHAR" />
      <result column="AREA_CODE" property="areaCode" jdbcType="VARCHAR" />
      <result column="A_ADDR" property=AAddr" jdbcType="VARCHAR" />
  <!-- 一下是对A对象中B的属性的映射配置 -->
   <association property="b" column="B_ID" select="com.BMapper.selectBById"/>
 </resultMap>

第三种方式只需要单表查询,但需要分别查询A表和B表,通过外键调用B表的select。association标签中调用的B表的select不通过BMapper的接口,因此在BMapper文件对应的接口中可以不写selectBById方法。

二、一对多
  B一对多A只需在resultMap标签中配置association标签即可。

<resultMap type="B" id="getB">
            <result property="Bid" column="Bid" />
           <collection property="AList" column="Bid" javaType="list" select="getAListByBid"/>
</resultMap>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值