【已解决】关于MyBatis的collection集合中只能取到一条数据的问题

一、问题

在涉及多表查询的时候,使用collection元素来映射集合属性时,出现了只能查询到一条数据的情况,但用sql语句在数据库中查询会有多条记录。

二、原因

如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。所以涉及查询所用的表的主键的命名不要相同,否则会混淆。

三、解决

如果关联查询的两个表的主键已经相同了,如表早就已经建好了,现在也不可能改表字段了,那么只需要查询时给关联表查询字段给个不一样的别名即可。

<!-- 通用查询映射结果 -->
    <resultMap id="UserResultMap" type="com.gd.mqtest.domain.User">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="age" property="age"/>
        <result column="email" property="email"/>
        <!--<collection property="userDetails" javaType="java.util.ArrayList" ofType="com.gd.mqtest.domain.UserDetail">-->
        <!--    <id column="t_id" property="id" />-->
        <!--    <result column="user_id" property="userId" />-->
        <!--    <result column="color" property="color" />-->
        <!--</collection>-->
    </resultMap>

    <select id="select" resultMap="UserResultMap">
        select u.id, u.name, u.age, u.email,ud.id t_id, ud.user_id, ud.color from user u join user_detail ud on u.id=ud.user_id
    </select>
MyBatis collection 标签用于处理查询语句返回多条记录时,将多条记录封装到一个集合collection 标签只能用于 resultMap 元素。 在 resultMap 元素使用 collection 标签,需要指定以下属性: - property:指定集合类型属性的名称。 - ofType:指定集合类型属性的数据类型。 - resultMap:指定为集合元素的映射关系。 - select:指定查询语句的 id。 下面是 collection 标签的一个示例: ```xml <resultMap id="userMap" type="User"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> <collection property="orders" ofType="Order" resultMap="orderMap"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="orderNo" column="order_no"/> <result property="amount" column="amount"/> </collection> </resultMap> <resultMap id="orderMap" type="Order"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="orderNo" column="order_no"/> <result property="amount" column="amount"/> </resultMap> ``` 在上述示例,我们定义了两个 resultMap,一个是 userMap,另一个是 orderMap。userMap 使用了 collection 标签,将订单封装到了 User 对象的 orders 属性。 注意,使用 collection 标签需要指定 ofType 属性,指定集合元素的数据类型。在上述示例,orders 是一个 List<Order> 类型的属性,因此我们指定了 ofType 属性为 Order。 同时,在 collection 标签还可以使用 select 属性,指定查询语句的 id。这个查询语句的返回结果将作为集合的元素。 ```xml <collection property="orders" ofType="Order" select="findOrdersByUserId"/> ``` 在上述示例,我们使用了 select 属性,指定了一个查询语句的 id,这个查询语句的返回结果将作为 orders 集合的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初夏0811

你的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值