解決java.lang.IllegalArgumentException: Result Maps collection does not contain value的錯誤

一 報錯信息
java.lang.IllegalArgumentException: Result Maps collection does not contain value

原因總結
1.在mapper.xml文件中 將resultType 和resultMap 混淆
注意:使用resultMap時,必須要有標籤指明id和返回類型以及表字段的對應關係。

如果是直接返回一個用戶定義的實體類型,則要使用resultType,弄混淆就會報錯。
三 resultType 和resultMap的區別
resultType:當使用resultType做SQL語句返回結果類型處理時,對於SQL語句查詢出的字段在相應的pojo中必須有和它相同的字段對應,而resultType中的內容就是pojo在本項目中的位置。
resultMap進行處理對應的。多表連接查詢時,若是一對一的連接查詢,那麼需要新建一個pojo,pojo中包括兩個表中需要查詢出的所有的字段,這個地方的處理方式通常爲創建一個繼承一個表字段的pojo,再在裏面添加另外一個表內需要查詢出的字段即可。若是一對多查詢時,若是使用內連接查詢,則很可能出現查詢出的字段有重複。使用雙重for循環嵌套處理即可。
resultMap:當使用resultMap做SQL語句返回結果類型處理時,通常需要在mapper.xml中定義resultMap進行pojo和相應表字段的對應。
情況一:一對一
resultMap對於一對一表連接的處理方式通常爲在主表的pojo中添加嵌套另一個表的pojo,然後在mapper.xml中採用association節點元素進行對另一個表的連接處理。例如:

<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">  
    <!-- 配置映射的訂單信息 -->  
    <!-- id:指定查詢列中的唯 一標識,訂單信息的中的唯 一標識,如果有多個列組成唯一標識,配置多個id  
        column:訂單信息的唯 一標識 列  
        property:訂單信息的唯 一標識 列所映射到Orders中哪個屬性  
      -->  
    <id column="id" property="id"/>  
    <result column="user_id" property="userId"/>  
    <result column="number" property="number"/>  
    <result column="createtime" property="createtime"/>  
    <result column="note" property=note/>  
      
    <!-- 配置映射的關聯的用戶信息 -->  
    <!-- association:用於映射關聯查詢單個對象的信息  
    property:要將關聯查詢的用戶信息映射到Orders中哪個屬性  
     -->  
    <association property="user"  javaType="cn.itcast.mybatis.po.User">  
        <!-- id:關聯查詢用戶的唯 一標識  
        column:指定唯 一標識用戶信息的列  
        javaType:映射到user的哪個屬性  
         -->  
        <id column="user_id" property="id"/>  
        <result column="username" property="username"/>  
        <result column="sex" property="sex"/>  
        <result column="address" property="address"/>  
      
    </association>  
</resultMap>  

情況二
一對多
若是一對多的表連接方式,比如訂單表和訂單明細表即爲一對多連接,若是不對sql語句進行處理,由於一個訂單對應多條訂單明細,因此查詢出的結果對於訂單表數據來說將會出現重複,例如:
resultMap的處理方式爲在訂單表數據的pojo中添加一個list,list中爲訂單明細表的屬性,在mapper.xml中採用如下的處理方式

!-- 訂單及訂單明細的resultMap
使用extends繼承,不用在中配置訂單信息和用戶信息的映射
–>



    <!-- 訂單明細信息  
    一個訂單關聯查詢出了多條明細,要使用collection進行映射  
    collection:對關聯查詢到多條記錄映射到集合對象中  
    property:將關聯查詢到多條記錄映射到cn.itcast.mybatis.po.Orders哪個屬性  
    ofType:指定映射到list集合屬性中pojo的類型  
     -->  
     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">  
        <!-- id:訂單明細唯 一標識  
        property:要將訂單明細的唯 一標識 映射到cn.itcast.mybatis.po.Orderdetail的哪個屬性  
          -->  
        <id column="orderdetail_id" property="id"/>  
        <result column="items_id" property="itemsId"/>  
        <result column="items_num" property="itemsNum"/>  
        <result column="orders_id" property="ordersId"/>  
     </collection>  
      
  
</resultMap>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章