mybatis关联查询有两种

http://blog.csdn.net/rain097790/article/details/13615291

 

 

 关联查询有两种

  1,元素标签中传入关联条件值,此种方法一般和sql语句的子查询配套(即关联实体的列是用sql结果集表示)

 

   一对一,多对一都是如此用

  <resultMap id="BaseResultMapVo" type="com.esteel.account.beanVo.TbCusFirmChgVo" >

    <!--

      WARNING - @mbggenerated

    -->

    <id column="CUSTOMER_KEY" property="customerKey" jdbcType="DECIMAL" />

    <result column="MARKET_KEY" property="marketKey" jdbcType="DECIMAL" />

    <result column="IS_REC_SMS" property="isRecSms" jdbcType="CHAR" />

    <result column="KF_CUSTOMER_KEY" property="kfCustomerKey" jdbcType="DECIMAL" />

    <result column="SET_USER_NUM" property="setUserNum" jdbcType="DECIMAL" />

    <association property="tbCusFirmChg" column="KF_CUSTOMER_KEY" javaType="com.esteel.account.bean.TbCusFirmChg" select="getCue">

    </association>

  </resultMap>

 

 

 

  <select id="getCue" resultMap="BaseResultMap">

    select KF.*  from TB_CUS_FIRM_CHG  KF where  KF.CUSTOMER_KEY=#{KF_CUSTOMER_KEY}

  </select>//子查询的参数不要指定,直接通过关联压入

 

 

<select id="getTbCusFirmChgAry" parameterType="map" resultMap="BaseResultMapVo">

  select C.* from TB_CUS_FIRM_CHG C 

  where 1=1

  </select>

  1. <collection property="htAuthorityDTO"  ofType="com.sailod.shiro.dto.HtAuthorityDTO"  
  2.          select="selectAuthority" column="{htAuthorityId2 = htAuthorityId ,currentUserId2 = currentUserId}"   >  
  3.          </collection>

这部分就相当于用一个大sql写的关联

  2,直接在大的sql中就把关联体现出来(例如where o.pid=p.p_id)(不用子查询)这种往往和用标签直接写出结果(也可用不带条件的子查询表示结果集(便于懒加载))

  注意用这种方式的时候要把主实体和关联的实体一起查出 select p.*,o.*

  http://blog.csdn.net/rain097790/article/details/13615291

  一对多,多对多都如此

  <?xml version="1.0" encoding="UTF-8"?>  

<!DOCTYPE mapper  

  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  

  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  

      

<mapper namespace="com.kerwin.mybatis.pojo.Person">  

    <resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">  

        <id column="p_id" property="id"/>  

        <result column="name" property="name"/>  

        <collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">  

            <id column="o_id" property="id"/>  

            <result column="price" property="price"/>  

        </collection>  

          

    </resultMap>  

      

    <select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >  

        select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}  

    </select>  

      

      

</mapper>  

 

注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,

导致测试结果级联出来的多一直只有一条数据,具体如下:

id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。

这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然导致数据结果集只有一条数据。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值