今天寫mybatis一對多查詢遇到了一個問題,就是多條的數據一直只顯示一條,給我快整吐了。
然後百度了一下,發現是因爲字段名相同的原因,我的兩張表的主鍵都是id,然後就直會顯示一條數據了。
<resultMap id="BaseResultMap" type="com.lmj.coupon.pojo.CouponForm">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="coupon_type" property="couponType" jdbcType="TINYINT"/>
<result column="use_type" property="useType" jdbcType="TINYINT"/>
<result column="shop_id" property="shopId" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="del_flag" property="delFlag" jdbcType="TINYINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
<collection property="couponTemplets" javaType="list"
ofType="com.lmj.coupon.pojo.CouponTemplet">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="cf_id" property="cfId" jdbcType="BIGINT"/>
<result column="coupon_type" property="couponType" jdbcType="TINYINT"/>
<result column="use_type" property="useType" jdbcType="TINYINT"/>
<result column="item_type" property="itemType" jdbcType="TINYINT"/>
</collection>
</resultMap>
然後只需要把多條數據的表id的column修改成別名就可以了(我改成了ctId,這樣sql語句裏面加一個as就行了):
<resultMap id="BaseResultMap" type="com.lmj.coupon.pojo.CouponForm">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="coupon_type" property="couponType" jdbcType="TINYINT"/>
<result column="use_type" property="useType" jdbcType="TINYINT"/>
<result column="shop_id" property="shopId" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="del_flag" property="delFlag" jdbcType="TINYINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
<collection property="couponTemplets" javaType="list"
ofType="com.lmj.coupon.pojo.CouponTemplet">
<id column="ctId" property="id" jdbcType="BIGINT"/>
<result column="cf_id" property="cfId" jdbcType="BIGINT"/>
<result column="coupon_type" property="couponType" jdbcType="TINYINT"/>
<result column="use_type" property="useType" jdbcType="TINYINT"/>
<result column="item_type" property="itemType" jdbcType="TINYINT"/>
</collection>
</resultMap>
<select id="getCouponForm" resultMap="BaseResultMap">
SELECT a.*,b.id as ctId,b.cf_id,b.name,b.remark,b.rule,b.expire_hour,b.shop_id,b.item_type FROM coupon_form a LEFT JOIN coupon_templet b ON a.id = b.cf_id
WHERE a.del_flag = 0 and b.sw = 1 and b.update_time > NOW() and NOW() > b.create_time and a.coupon_type = 6
<if test="shopId != null and shopId != '' ">
and a.shop_id = #{shopId}
</if>
</select>