在今天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中如果不定義類似主鍵之類的能夠區分每一條結果集的字段的話,會引起後面一條數據覆蓋前面一條數據的現象