关联查询有两种
1,元素标签中传入关联条件值,此种方法一般和sql语句的子查询配套(即关联实体的列是用sql结果集表示)
一对一,多对一都是如此用
<resultmap>
<result>
<result>
<result>
<result>
<association>
<select>
select KF.* from TB_CUS_FIRM_CHG KF where KF.CUSTOMER_KEY=#{KF_CUSTOMER_KEY}
//子查询的参数不要指定,直接通过关联压入
<select>
select C.* from TB_CUS_FIRM_CHG C
where 1=1
- <collection> property="htAuthorityDTO" ofType="com.sailod.shiro.dto.HtAuthorityDTO" /<collection>
- select="selectAuthority" column="{htAuthorityId2 = htAuthorityId ,currentUserId2 = currentUserId}" >
这部分就相当于用一个大sql写的关联
2,直接在大的sql中就把关联体现出来(例如where o.pid=p.p_id)(不用子查询)这种往往和用标签直接写出结果(也可用不带条件的子查询表示结果集(便于懒加载))
注意用这种方式的时候要把主实体和关联的实体一起查出 select p.*,o.*
http://blog.csdn.net/rain097790/article/details/13615291
一对多,多对多都如此
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper> /<mapper>
<resultmap> /<resultmap>
<result>
<collection> /<collection>
<result>
<select> /<select>
select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}
注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,
导致测试结果级联出来的多一直只有一条数据,具体如下:
id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。
这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然导致数据结果集只有一条数据。
閱讀更多 程序員小新人學習 的文章