mybatis 关联查询 结果条数确与子表条数相同 问题解决方法

在MyBatis中遇到一个问题,当进行关联查询时,预期应该返回一条数据,其中包含子表的两条记录,但实际返回了两条主表数据,每条数据的子表关联字段steps只包含子表的一条记录。解决方法是在主表的主键字段上设置别名,例如dm.id as id,以此避免查询结果的错误分组。

xml文件

    <resultMap id="BaseResultMapAndStep" type="com.printsky.tms.conanholmes.model.entity.diagnose.DiagnoseModelEntity" >
        <constructor >
            <idArg column="dm.id" jdbcType="BIGINT" javaType="java.lang.Long" />
            <arg column="dm.name" jdbcType="VARCHAR" javaType="java.lang.String" />
            <arg column="dm.valid" jdbcType="INTEGER" javaType="java.lang.Integer" />
            <arg column="dm.type" jdbcType="INTEGER" javaType="java.lang.Integer" />
            <arg column="dm.diagnoseExtend" jdbcType="VARCHAR" javaType="java.lang.String" />
            <arg column="dm.createtor" jdbcType="VARCHAR" javaType="java.lang.String" />
            <arg column="dm.operator" jdbcType="VARCHAR" javaType="java.lang.String" />
            <arg column="dm.createTime" jdbcType="TIMESTAMP" javaType="java.util.Date" />
            <arg column="dm.updateTime" jdbcType="TIMESTAMP" javaType="java.util.Date" />
        </constructor>
        <collection property="steps" ofType="com.printsky.tms.conanholmes.model.entity.diagnose.DiagnoseStepEntity" javaType="ArrayList">
            <constructor >
                <idArg column="ds.id" jdbcType="BIGINT" javaType="java.lang.Long" />
                <arg column="ds.name" jdbcType="VARCHAR" javaType="java.lang.String" />
                <arg column="ds.dmId" jdbcType="BIGINT" javaType="java.lang.Long" />
                <arg column="ds.dmChildId" jdbcType="BIGINT" javaType="java.lang.Long" />
                <arg column="ds.step" jdbcType="INTEGER" javaType="java.lang.Integer" />
                <arg column="ds.dnId" jdbcType="BIGINT" javaType="java.lang.Long" />
                <arg column="ds.createtor" jdbcType="VARCHAR" javaType="java.lang.String" />
                <arg column="ds.operator" jdbcType="VARCHAR" javaType="java.lang.String" />
                <arg column="ds.createTime" jdbcType="TIMESTAMP" javaType="java.util.Date" />
                <arg column="ds.updateTime" jdbcType="TIMESTAMP" javaType="java.util.Date" />
            </constructor>
        </collection>
    </resultMap>
    <select id="selectByParam" resultMap="BaseResultMapAndStep" parameterType="com.printsky.tms.conanholmes.model.entity.diagnose.DiagnoseModelEntity" >
        select
        dm.id , dm.name, dm.valid, dm.type, dm.diagnoseExtend, dm.createtor, dm.operator, dm.createTime, dm.updateTime,
        ds.id, ds.name, ds.dmId,  ds.dmChildId, ds.step, ds.dnId,ds.createtor, ds.operator, ds.createTime, ds.updateTime
        from diagnose_model dm,diagnose_step ds
        where dm.id = ds.dmId
    </select>

数据库中 主表有一条数据 子表有两条数据

期望结果是查询到一条数据 结果中有个steps 字段的size为2

实际结果是 返回了2条数据 且每条数据中steps字段size为1 分别为子表中一条记录

 

解决方法:

给主表的主键的 返回字段起个别名 也就是 dm.id as id

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值