07.25 mybatis關聯查詢有兩種

mybatis關聯查詢有兩種

mybatis關聯查詢有兩種

關聯查詢有兩種

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

  1. <collection> property="htAuthorityDTO" ofType="com.sailod.shiro.dto.HtAuthorityDTO" /<collection>
  2. 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應該唯一區別,不然導致數據結果集只有一條數據。


分享到:


相關文章: