mybatis association會出現覆蓋記錄 導致只返回最後一條記錄

在今天1024這個程序員節我先定一個題目得一個勳章,一會兒對應標題寫一篇,先去恰個飯
來了來了
來說說爲什麼會出現這個情況,實際問題就是有多個聯合表,我們知道mybatis的重點就是返回集的結果映射,那麼那麼多數據庫的字段聯合查詢應該怎麼辦呢,所以我就想新建一個類裏面封着各個表的實體類

package com.ssm.entity;

import java.util.Date;

public class OrderLand{
 
	private HappyFarmUser happyFarmUser;
	
	private HappyFarmSeller happyFarmSeller;
	
	private OrderforSeller orderforSeller;
	
	private HappyFarmLandinfo happyFarmLandinfo;
	
	private Logistics  logistics;
	
	private Address   address;
	
	private OrderEnd orderend;
	
	private OrderforBuyer orderforBuyer

}

這個就可以把xml的對應的值映射到實體類中了,然後我就查詢所有發現只出現第一個
只能映射最後一個對象,我就想想肯定是覆蓋了,那麼爲什麼會覆蓋呢,讓我們來看看修改後不覆蓋的

  <resultMap id="BaseResultMap11" type="com.ssm.entity.OrderforBuyer">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="orderId" jdbcType="VARCHAR" property="orderid" />
    <result column="userId" jdbcType="INTEGER" property="userid" />
    <result column="productId" jdbcType="VARCHAR" property="productid" />
    <result column="goodNumber" jdbcType="INTEGER" property="goodnumber" />
    <result column="addressId" jdbcType="INTEGER" property="addressid" />
    <result column="orderStatus" jdbcType="INTEGER" property="orderstatus" />
    <result column="orderTime" jdbcType="TIMESTAMP" property="ordertime" />
    <result column="userphone" jdbcType="VARCHAR" property="userphone" />
		 <association property="orderend" javaType="com.ssm.entity.OrderEnd">
		  	<id column="id" jdbcType="INTEGER" property="id" />
		    <result column="orderId" jdbcType="VARCHAR" property="orderid" />
		    <result column="orderEnd" jdbcType="INTEGER" property="orderend" />
		 </association>
			<association property="happyFarmLandinfo" javaType="com.ssm.entity.HappyFarmLandinfo">
			<id column="landID" jdbcType="INTEGER" property="landid" />
		    <result column="landName" jdbcType="VARCHAR" property="landname" />
		    <result column="landPrice" jdbcType="DOUBLE" property="landprice" />
		    <result column="landImg" jdbcType="VARCHAR" property="landimg" />
		    <result column="landMs" jdbcType="VARCHAR" property="landms" />
		    <result column="landArea" jdbcType="VARCHAR" property="landarea" />
		    <result column="landDate" jdbcType="DATE" property="landdate" />
		    <result column="landSize" jdbcType="VARCHAR" property="landsize" />
		    <result column="status" jdbcType="INTEGER" property="status" />
		</association>
  
		<association property="happyFarmUser" javaType="com.ssm.entity.HappyFarmUser">
			<id column="id" jdbcType="INTEGER" property="id" />
		    <result column="username" jdbcType="VARCHAR" property="username" />
		    <result column="password" jdbcType="VARCHAR" property="password" />
		</association>
		<association property="happyFarmSeller" javaType="com.ssm.entity.HappyFarmSeller">
				    <id column="id" jdbcType="INTEGER" property="id" />
				    <result column="name" jdbcType="VARCHAR" property="name" />
				    <result column="password" jdbcType="VARCHAR" property="password" />
		</association>
	
		<association property="orderforSeller" javaType="com.ssm.entity.OrderforSeller">
		    <id column="id" jdbcType="INTEGER" property="id" />
			<result column="orderId" jdbcType="VARCHAR" property="orderid" />
			<result column="deliveryStatus" jdbcType="INTEGER" property="deliverystatus" />
			<result column="logisticsId" jdbcType="INTEGER" property="logisticsid" />
		</association>

		<association property="logistics" javaType="com.ssm.entity.Logistics">
		    <id column="logisticsId" jdbcType="INTEGER" property="logisticsid" />
		    <result column="logisticsName" jdbcType="VARCHAR" property="logisticsname" />
		</association>
		<association property="address" javaType="com.ssm.entity.Address">
		    	 <id column="addressId" jdbcType="INTEGER" property="addressid" />
    			<result column="addressName" jdbcType="VARCHAR" property="addressname" />
		</association>
  </resultMap>

這個呢是我修改過後的可以查詢列表左右的字段,唯一的區別就是有一個id id可以讓他們不重複的出現,每一個id對應不一樣的字段,所以這樣就不會覆蓋了。
發現問題的關鍵在於resultMap中如果不定義類似主鍵之類的能夠區分每一條結果集的字段的話,會引起後面一條數據覆蓋前面一條數據的現象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章