關於mybatis中不執行的其中一種情況

問題

我在mapper中寫<collection/> 作聯合查詢的時候,返回的結果裏沒有聯合查詢的數據。使用debug在控制檯把sql語句打印出來後,發現根本沒有執行聯合查詢對應的sql語句。

代碼

先試result的代碼

<resultMap type="com.mytest.domain.ActivityRecord" id="baseactivityRecordResultMap">
        <id column="RECORD_ID" property="recordId" />
        <result column="CREATE_TIME" property="createTime"  />
        <result column="RECORD_CONTENT" property="recordContent"  />
        <result column="UPDATE_TIME" property="updateTime"  />
        <result column="USER_ID" property="userId" />
        <result column="ACTIVITY_ID" property="activityId"  />
        <result column="RECORD_ADDRESS" property="recordAddress"   />
        <result column="JOIN_TIME" property="joinTime"  />
    </resultMap>

    <resultMap type="com.mytest.domain.ActivityRecord" id="activityRecordResultMap" extends="baseactivityRecordResultMap">
        <collection column="RECORD_ID" property="files" ofType="com.mytest.domain.SysFile" javaType="java.util.ArrayList" select="com.mytest.dao.SysFileDao.getAttachment"/>
    </resultMap>

然後是未修改前的主sql語句

<select id="getActivityRecordContent" resultMap="activityRecordResultMap">
      SELECT CREATE_TIME,RECORD_CONTENT,RECORD_ADDRESS,JOIN_TIME,USER_ID,ACTIVITY_ID
      FROM ACTIVITY_RECORD
      WHERE RECORD_ID=#{recordId}
   </select>

因爲之前說了,程序根本沒有走collection的查詢方法,因此和這collection參數的關係並不太大,除了column

大概原理

<collection/>中的column 表示你要拿現在查詢出來的哪一條或者哪幾條數據當做聯合查詢的條件。
可以看到我寫的<collection/> 中的columnRECORD_ID,但是我的主sql語句的select 結果集裏並不包含RECORD_ID,mybatis找不到RECORD_ID這個字段,因此就會直接忽略掉以RECORD_ID 爲查詢條件的 <collection/> 這個組合查詢

解決方法

RECORD_ID加入到SELECT 查詢結果集裏即可

<select id="getActivityRecordContent" resultMap="activityRecordResultMap">
      SELECT CREATE_TIME,RECORD_CONTENT,RECORD_ADDRESS,JOIN_TIME,USER_ID,ACTIVITY_ID,RECORD_ID
      FROM ACTIVITY_RECORD
      WHERE RECORD_ID=#{recordId}
   </select>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章