1. 程式人生 > >最終解決Mybatis多表聯合查詢中欄位名重複導致的各路問題

最終解決Mybatis多表聯合查詢中欄位名重複導致的各路問題

解決欄位名重複導致的問題,簡單直接的方法是設定別名,例如

        <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。
問題解決。