最終解決Mybatis多表聯合查詢中欄位名重複導致的各路問題
阿新 • • 發佈:2019-02-06
解決欄位名重複導致的問題,簡單直接的方法是設定別名,例如
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<association property="post" column="postCode" javaType="com.test.post.model.Post" >
<id property="id" column ="postid"/>
<result property="name" column="postname"/>
</association>
然而隨之樓主又出現了一個新的問題,例如此例中,當postCode為空時,postid和postname理所當然為空。這時,又出現了問題:post的id和name竟然被賦予了外圍employee的id和name值。這顯然不是我們想要的結果啊,怎麼辦呢:
<configuration>
<settings>
<setting name ="callSettersOnNulls" value="true"/>
<!--查詢欄位為空時依舊返回至物件-->
</settings>
</configuration>
在mybatis的配置檔案中加上這句程式碼後,post的id和name,被正常的賦予了null值,而不是錯誤的employee的值了。
然而還是不對啊,這裡employee為空,查詢返回的post應該是null才對,而不是返回一個屬性都是空的post。
怎麼解決呢,嘗試一下另一種association的查詢方式吧:
<association property="post" column="postCode" select="com.test.post.dao.PostMapper.selectByPrimaryKey"/>
用分步查詢的方式,果然沒有巢狀查詢所帶來的問題了。返回了正常的null。
問題解決。