关于mybatis一对多关联查询多条数据只显示一条的问题

今天写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>

版权声明:本文为weixin_42322648原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。