关联查询有两种
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>
- <collection property="htAuthorityDTO" ofType="com.sailod.shiro.dto.HtAuthorityDTO"
- select="selectAuthority" column="{htAuthorityId2 = htAuthorityId ,currentUserId2 = currentUserId}" >
- </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应该唯一区别,不然导致数据结果集只有一条数据。
本文暂时没有评论,来添加一个吧(●'◡'●)