1. 程式人生 > >(超詳細)在使用mybatis時遇到查詢結果返回為空(NULL)的情況,但是查資料庫能查到

(超詳細)在使用mybatis時遇到查詢結果返回為空(NULL)的情況,但是查資料庫能查到

這個問題困擾了我一個下午,看了很多部落格都沒有我中情況,所有寫給和我有一樣錯誤的

由於我的實體類裡聲明瞭其它實體類,所以在mapper.xml檔案裡要使用resultMap,在resultMap裡要使用association引入,否則會報錯

 

下面貼出我的實體類:

public class Subject {
    private Integer subid;
    private String subname;
    private Teacher tutor;
    private Teacher othertutor;

    //省略get和set方法
}

注意:聲明瞭 Teacher 類

sql 語句:

<select id="getSubjectSim"  resultMap="SubjectMap">
   SELECT  tutorid,subname FROM tb_subject
</select>

resultMap:

<resultMap id="SubjectMap" type="com.learn.mydos.entity.Subject">
    <id column="subid" property="subid"/>
    <result column="subname" property="subname"/>
    <association property="tutor" javaType="com.learn.mydos.entity.Teacher" column="tutorid" >
    </association>
    <association property="othertutor" javaType="com.learn.mydos.entity.Teacher"              column="othertid">
    </association>
</resultMap>

   

這裡用到了 association,property為實體類裡定義的名稱,javaType 為實體類,column 為資料庫欄位名

問題來了

我想取 Teacher 類裡的 tid

 但是返回的是null,我到資料庫裡使用sql語句查詢,能查到tid,我糾結了一會,重新去看mybaties裡的association

下面我貼出教程裡介紹的

關聯:

<association property="author" column="blog_author_id" javaType="Author">
  <id property="id" column="author_id"/>
  <result property="username" column="author_username"/>
</association>

關聯元素處理“有一個”型別的關係。比如,在我們的示例中,一個部落格有一個使用者。 關聯對映就工作於這種結果之上。你指定了目標屬性,來獲取值的列,屬性的 java 型別(很 多情況下 MyBatis 可以自己算出來) ,如果需要的話還有 jdbc 型別,如果你想覆蓋或獲取的 結果值還需要型別控制器。

關聯中不同的是你需要告訴 MyBatis 如何載入關聯。MyBatis 在這方面會有兩種不同的 方式:

  • 巢狀查詢:通過執行另外一個 SQL 對映語句來返回預期的複雜型別。
  • 巢狀結果:使用巢狀結果對映來處理重複的聯合結果的子集。首先,然讓我們來檢視這個元素的屬性。所有的你都會看到,它和普通的只由 select 和

resultMap 屬性的結果對映不同。

看完之後,就按按照著教程在 association 裡新增 id 和 result

<resultMap id="SubjectMap" type="com.learn.mydos.entity.Subject">
        <id column="subid" property="subid"/>
        <result column="subname" property="subname"/>
        <association property="tutor" javaType="com.learn.mydos.entity.Teacher" column="tutorid" >
            <id column="tutorid" property="tid"/>
            <result column="tname" property="tname"/>
        </association>
        <association property="othertutor" javaType="com.learn.mydos.entity.Teacher" column="othertid">
            <id column="othertid" property="tid"/>
            <result column="tname" property="tname"/>
        </association>

果然,再測試一下就有值了