(超詳細)在使用mybatis時遇到查詢結果返回為空(NULL)的情況,但是查資料庫能查到
阿新 • • 發佈:2018-11-29
這個問題困擾了我一個下午,看了很多部落格都沒有我中情況,所有寫給和我有一樣錯誤的
由於我的實體類裡聲明瞭其它實體類,所以在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>
果然,再測試一下就有值了