Expected one result (or null) to be returned by selectOne(), but found: 3

这里我们要解决的需求是:解决数据库中两张表之间一对多的数据集合想封装到一个对应的实体类:

我们采用mybits框架中resultMap来进行手动映射

<select id="这里是绑定方法,通过这个将结果返回给接口中的方法" resultMap="这里是结果集映射">
    //这里是我们要查询的sql
</select>
<resultMap id="这里是结果集映射" type="这里是实体类">//这里是实体类
    //这里是我们查询的结果集映射
    <id column="主键" property="主键属性名"/>//这里是主键
    <result column="字段名" property="属性名"/>//这里是我们查询的结果映射到属性上
    <collection property="属性名" ofType="集合类型">//这里是集合
        //collection作用在于将子表数据封装到集合中
        // ofType是集合中元素的类型
        <id column="主键" property="主键属性名"/>//这里是主键
        <result column="字段名" property="属性名"/>//这里是我们查询的结果映射到属性上
    </collection>
</resultMap>

        我们使用上面的解决方案来满足我们的需求:但是发现查询到三条数据但是返回给我的只有一条数据,没有达到我们预期的效果。导致这种原因是因为我们我们处理好它们字段的之间的映射,这里我们可以清楚的看出来,对这个一对多的两张表的处理,我们需要两张表的主键id,但是我们没有对Sql语句进行区分,导致我们数据映射不准确,从而达不到我们像要的需求

        同理我们也可以发现我们Sql语句中查询的结果中有很多属性名都一样,这时候在自动映射的时间我们找不到响应的字段。

解决方法:就是给我们的查询的结果中的属性名起别名

解决示例代码:

<select id="这里是绑定方法,通过这个将结果返回给接口中的方法" resultMap="这里是结果集映射">
        select e.*,ei.id deptId,ei deptName from emp e left join dept ei on e.dept_id = ei.id
    </select>
    <resultMap id="这里是结果集映射" type="这里是实体类">
        <id column="id" property="id"/>//这里是主键
        <result column="字段名" property="属性名"/>
        <collection property="这里是结果集映射" ofType="集合类型">
            <id column="deptId" property="deptId"/>
            <result column="字段名" property="属性名"/>
        </collection>
    </resultMap>

起别名以后每个属性都是唯一的,就解决自动映射找不到对应的属性名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值