關聯查詢有兩種
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應該唯一區別,不然導致數據結果集只有一條數據。
閱讀更多 程序員小新人學習 的文章